home *** CD-ROM | disk | FTP | other *** search
Text File | 2001-10-03 | 427.1 KB | 13,124 lines |
- /*
- ** replcom.sql 1997/02/12 22:03
- **
- **
- ** Copyright Microsoft, Inc. 1998-2000
- ** All Rights Reserved.
- */
-
-
- dump tran master with no_log
- go
-
- exec dbo.sp_configure 'update',1
- go
- reconfigure with override
- go
-
- set ANSI_NULLS off
- go
-
- use master
- go
-
- exec dbo.sp_MS_upd_sysobj_category 1 --Capture time for use at the end
- go
-
-
- dump tran master with no_log
- GO
-
- /*
- ** Drop the stored procedures in this script using the old dropping SP
- ** and then drop itself
- */
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_MSdrop_replcom')
- begin
- drop procedure sp_MSdrop_replcom
- end
-
- /*
- ** Create stored procedures to drop the stored procedures
- ** created by this script
- */
-
- raiserror('Creating procedure sp_MSdrop_replcom', 0,1)
- GO
-
- create procedure sp_MSdrop_replcom
- as
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_MScreate_distributor_tables')
- drop procedure sp_MScreate_distributor_tables
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_MSIfExistsRemoteLogin')
- drop procedure sp_MSIfExistsRemoteLogin
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_helppublicationsync')
- drop procedure sp_helppublicationsync
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_addpublication_snapshot')
- drop procedure sp_addpublication_snapshot
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_MShelpobjectpublications')
- drop procedure sp_MShelpobjectpublications
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_addpublisher')
- drop procedure sp_addpublisher
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_addsubscriber')
- drop procedure sp_addsubscriber
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_addsubscriber_schedule')
- drop procedure sp_addsubscriber_schedule
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_changesubscriber_schedule')
- drop procedure sp_changesubscriber_schedule
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_changesubscriber')
- drop procedure sp_changesubscriber
-
- IF EXISTS (SELECT * FROM sysobjects
- WHERE type = 'P'
- AND name = 'sp_MScreate_dist_tables')
- DROP PROCEDURE sp_MScreate_dist_tables
-
- IF EXISTS (SELECT * FROM sysobjects
- WHERE type = 'P'
- AND name = 'sp_MSupdate_mqserver_distdb')
- DROP PROCEDURE sp_MSupdate_mqserver_distdb
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_distcounters')
- drop procedure sp_distcounters
-
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_droppublisher')
- drop procedure sp_droppublisher
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_dropsubscriber')
- drop procedure sp_dropsubscriber
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_dsninfo')
- drop procedure sp_dsninfo
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_enumdsn')
- drop procedure sp_enumdsn
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_helpdistributor')
- drop procedure sp_helpdistributor
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_helppublicationsync') /* Remove old version */
- drop procedure sp_helppublicationsync
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_helpreplicationdb')
- drop procedure sp_helpreplicationdb
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_helpsubscriberinfo')
- drop procedure sp_helpsubscriberinfo
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_publishdb')
- drop procedure sp_publishdb
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_replica')
- drop procedure sp_replica
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_adddistributiondb')
- drop procedure sp_adddistributiondb
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_changedistributiondb')
- drop procedure sp_changedistributiondb
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_helpdistributiondb')
- drop procedure sp_helpdistributiondb
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_dropdistributiondb')
- drop procedure sp_dropdistributiondb
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_adddistpublisher')
- drop procedure sp_adddistpublisher
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_changedistpublisher')
- drop procedure sp_changedistpublisher
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_helpdistpublisher')
- drop procedure sp_helpdistpublisher
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_dropdistpublisher')
- drop procedure sp_dropdistpublisher
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_MSadd_distributor_alerts_and_responses')
- drop procedure sp_MSadd_distributor_alerts_and_responses
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_MSdrop_distributor_alerts_and_responses')
- drop procedure sp_MSdrop_distributor_alerts_and_responses
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_adddistributor')
- drop procedure sp_adddistributor
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_dropdistributor')
- drop procedure sp_dropdistributor
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_changedistributor_property')
- drop procedure sp_changedistributor_property
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_helpdistributor_properties')
- drop procedure sp_helpdistributor_properties
-
- if exists (select * from sysobjects
- where type = 'X'
- and name = 'sp_repldone')
- exec dbo.sp_dropextendedproc 'sp_repldone'
-
- if exists (select * from sysobjects
- where type = 'X'
- and name = 'sp_repltrans')
- exec dbo.sp_dropextendedproc 'sp_repltrans'
-
- if exists (select * from sysobjects
- where type = 'X'
- and name = 'sp_replcmds')
- exec dbo.sp_dropextendedproc 'sp_replcmds'
-
- if exists (select * from sysobjects
- where type = 'X'
- and name = 'sp_replcounters')
- exec dbo.sp_dropextendedproc 'sp_replcounters'
-
- if exists (select * from sysobjects
- where type = 'X'
- and name = 'sp_replflush')
- exec dbo.sp_dropextendedproc 'sp_replflush'
-
- if exists (select * from sysobjects
- where type = 'X'
- and name = 'sp_replpostcmd' )
- exec dbo.sp_dropextendedproc 'sp_replpostcmd'
-
- if exists (select * from sysobjects
- where type = 'X'
- and name = 'sp_replpostschema' )
- exec dbo.sp_dropextendedproc 'sp_replpostschema'
-
- if exists (select * from sysobjects
- where type = 'X'
- and name = 'sp_replincrementlsn' )
- exec dbo.sp_dropextendedproc 'sp_replincrementlsn'
-
- if exists (select * from sysobjects
- where type = 'X'
- and name = 'sp_replupdateschema' )
- exec dbo.sp_dropextendedproc 'sp_replupdateschema'
-
- if exists (select * from sysobjects
- where type = 'X'
- and name = 'sp_replsetoriginator' )
- exec dbo.sp_dropextendedproc 'sp_replsetoriginator'
-
- if exists (select * from sysobjects
- where type = 'X'
- and name = 'sp_replsetsyncstatus' )
- exec dbo.sp_dropextendedproc 'sp_replsetsyncstatus'
-
- if exists (select * from sysobjects
- where type = 'X'
- and name = 'sp_replpostsyncstatus' )
- exec dbo.sp_dropextendedproc 'sp_replpostsyncstatus'
-
- if exists (select * from sysobjects
- where type = 'X'
- and name = 'xp_enumdsn')
- exec dbo.sp_dropextendedproc 'xp_enumdsn'
-
- if exists (select * from sysobjects
- where type = 'X'
- and name = 'xp_oledbinfo')
- exec dbo.sp_dropextendedproc 'xp_oledbinfo'
-
- if exists (select * from sysobjects
- where type = 'X'
- and name = 'xp_dsninfo')
- exec dbo.sp_dropextendedproc 'xp_dsninfo'
-
- if exists (select * from sysobjects
- where type = 'X'
- and name = 'xp_repl_encrypt')
- exec dbo.sp_dropextendedproc 'xp_repl_encrypt'
-
- if exists (select * from sysobjects
- where type = 'X'
- and name = 'xp_repl_convert_encrypt')
- exec dbo.sp_dropextendedproc 'xp_repl_convert_encrypt'
-
- if exists (select * from sysobjects
- where type = 'X'
- and name = 'xp_repl_help_connect')
- exec dbo.sp_dropextendedproc 'xp_repl_help_connect'
-
- if exists (select * from sysobjects
- where type = 'X'
- and name = 'xp_replproberemsrv')
- exec dbo.sp_dropextendedproc 'xp_replproberemsrv'
-
- -- sp_helpsubscriber is removed permanently from the system.
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_helpsubscriber')
- drop procedure sp_helpsubscriber
-
- -- sp_MSrepl_encrypt obsolete; use xp_repl_encrypt
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_MSrepl_encrypt')
- drop procedure sp_MSrepl_encrypt
-
- if exists (select * from sysobjects
- where name = 'sp_add_agent_profile'
- and type = 'P')
- drop procedure sp_add_agent_profile
-
- if exists (select * from sysobjects
- where name = 'sp_help_agent_profile'
- and type = 'P')
- drop procedure sp_help_agent_profile
-
- if exists (select * from sysobjects
- where name = 'sp_help_agent_default'
- and type = 'P')
- drop procedure sp_help_agent_default
-
- if exists (select * from sysobjects
- where name = 'sp_drop_agent_profile'
- and type = 'P')
- drop procedure sp_drop_agent_profile
-
- if exists (select name from sysobjects
- where name = 'sp_MSupdate_agenttype_default'
- and type = 'P')
- drop procedure sp_MSupdate_agenttype_default
-
- if exists (select * from sysobjects
- where name = 'sp_MSvalidate_agent_parameter'
- and type = 'P')
- drop procedure sp_MSvalidate_agent_parameter
-
- if exists (select * from sysobjects
- where name = 'sp_add_agent_parameter'
- and type = 'P')
- drop procedure sp_add_agent_parameter
-
- if exists (select * from sysobjects
- where name = 'sp_generate_agent_parameter'
- and type = 'P')
- drop procedure sp_generate_agent_parameter
-
- if exists (select * from sysobjects
- where name = 'sp_change_agent_parameter'
- and type = 'P')
- drop procedure sp_change_agent_parameter
-
- if exists (select * from sysobjects
- where name = 'sp_change_agent_profile'
- and type = 'P')
- drop procedure sp_change_agent_profile
-
- if exists (select * from sysobjects
- where name = 'sp_help_agent_parameter'
- and type = 'P')
- drop procedure sp_help_agent_parameter
-
- if exists (select * from sysobjects
- where name = 'sp_drop_agent_parameter'
- and type = 'P')
- drop procedure sp_drop_agent_parameter
-
- if exists (select * from sysobjects
- where name = 'sp_MShelp_distdb'
- and type = 'P')
- drop procedure sp_MShelp_distdb
-
- if exists (select * from sysobjects
- where name = 'sp_MShelp_distdb'
- and type = 'P')
- drop procedure sp_MShelp_distdb
-
- if exists (select * from sysobjects
- where name = 'sp_MSenum_misc_agents'
- and type = 'P')
- drop procedure sp_MSenum_misc_agents
-
- if exists (select * from sysobjects
- where name = 'sp_MSupdate_replication_status'
- and type = 'P')
- drop procedure sp_MSupdate_replication_status
-
- if exists (select * from sysobjects
- where name = 'sp_MSload_replication_status'
- and type = 'P')
- drop procedure sp_MSload_replication_status
-
- if exists (select * from sysobjects
- where name = 'sp_MScreate_replication_status_table'
- and type = 'P')
- drop procedure sp_MScreate_replication_status_table
-
- if exists (select * from sysobjects
- where name = 'sp_MShelp_replication_status'
- and type = 'P')
- drop procedure sp_MShelp_replication_status
-
- if exists (select * from sysobjects
- where name = 'sp_MSenum_replication_agents'
- and type = 'P')
- drop procedure sp_MSenum_replication_agents
-
- if exists (select * from sysobjects
- where name = 'sp_replication_agent_checkup'
- and type = 'P')
- drop procedure sp_replication_agent_checkup
-
- if exists (select * from sysobjects
- where name = 'sp_MSreplrole'
- and type = 'P')
- drop procedure sp_MSreplrole
-
- if exists (select * from sysobjects
- where name = 'sp_MScreate_replication_checkup_agent'
- and type = 'P')
- drop procedure sp_MScreate_replication_checkup_agent
-
- if exists (select * from sysobjects
- where name = 'sp_MSenum_replication_job'
- and type = 'P')
- drop procedure sp_MSenum_replication_job
-
- if exists (select * from sysobjects
- where name = 'sp_MSrepl_dbrole'
- and type = 'P')
- drop procedure sp_MSrepl_dbrole
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_oledbinfo')
- drop procedure sp_oledbinfo
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_enumoledbdatasources')
- drop procedure sp_enumoledbdatasources
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_MSget_oledbinfo')
- drop procedure sp_MSget_oledbinfo
-
- if exists (select * from sysobjects
- where name = 'sp_changedistributor_password'
- and type = 'P')
- drop procedure sp_changedistributor_password
-
- if exists (select * from sysobjects
- where name = 'sp_grant_publication_access'
- and type = 'P')
- drop procedure sp_grant_publication_access
-
- if exists (select * from sysobjects
- where name = 'sp_revoke_publication_access'
- and type = 'P')
- drop procedure sp_revoke_publication_access
-
- if exists (select * from sysobjects
- where name = 'sp_help_publication_access'
- and type = 'P')
- drop procedure sp_help_publication_access
-
- if exists (select * from sysobjects
- where name = 'sp_check_publication_access'
- and type = 'P')
- drop procedure sp_check_publication_access
-
- if exists (select * from sysobjects
- where name = 'sp_MSinit_replication_perfmon'
- and type = 'P')
- drop procedure sp_MSinit_replication_perfmon
-
- if exists (select * from sysobjects
- where name = 'sp_MSrepl_startup'
- and type = 'P')
- drop procedure sp_MSrepl_startup
-
- if exists (select * from sysobjects
- where name = 'sp_MSflush_access_cache'
- and type = 'P')
- drop procedure sp_MSflush_access_cache
-
- if exists (select * from sysobjects
- where name = 'sp_MSreinit_failed_subscriptions'
- and type = 'P')
- drop procedure sp_MSreinit_failed_subscriptions
-
- if exists (select * from sysobjects
- where name = 'sp_add_datatype_mapping'
- and type = 'P')
- drop procedure sp_add_datatype_mapping
-
- if exists (select * from sysobjects
- where name = 'sp_help_datatype_mapping'
- and type = 'P')
- drop procedure sp_help_datatype_mapping
-
- if exists (select * from sysobjects
- where name = 'sp_MSrepl_gettype_mappings'
- and type = 'P')
- drop procedure sp_MSrepl_gettype_mappings
-
- if exists (select * from sysobjects
- where name = 'sp_MSfix_6x_tasks'
- and type = 'P')
- drop procedure sp_MSfix_6x_tasks
-
- if exists (select * from sysobjects
- where name = 'sp_MSget_agent_names'
- and type = 'P')
- drop procedure sp_MSget_agent_names
-
- -- Common conflict viewer support procs
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_MShelpconflictpublications')
- drop procedure sp_MShelpconflictpublications
-
- -- Procs for managing dynamic snapshot views
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_MScleanupdynsnapshotvws')
- drop procedure sp_MScleanupdynsnapshotvws
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_MScleanupmergepublisher')
- drop procedure sp_MScleanupmergepublisher
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_MScleanupmergepublisherdb')
- drop procedure sp_MScleanupmergepublisherdb
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_MShelp_replication_table')
- drop procedure sp_MShelp_replication_table
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_MScopyscriptfile')
- drop procedure sp_MScopyscriptfile
-
- if exists (select * from sysobjects
- where type = 'FN'
- and name = 'fn_replgetagentcommandlinefromjobid')
- drop function system_function_schema.fn_replgetagentcommandlinefromjobid
-
- if exists (select * from sysobjects
- where type = 'P'
- and name = 'sp_replproberemoteserver')
- drop procedure sp_replproberemoteserver
-
- if exists (select * from sysobjects
- where type = 'FN'
- and name = 'fn_getpersistedservernamecasevariation'
- and user_id('system_function_schema') = uid)
- drop function system_function_schema.fn_getpersistedservernamecasevariation
-
- GO
-
- /*
- ** We must execute dbo.sp_MSdrop_replcom here since sp_MSdrop_replcom may not exist
- ** before this script is applied and it is possible
- ** that some replication sps are left. (We ignore error when dropping
- ** the replication so it is possible sp_MSdrop_replcom is dropped but
- ** some replication sps were left).
- */
- exec dbo.sp_MSdrop_replcom
- go
-
- raiserror('Creating procedure sp_MScreate_distributor_tables', 0,1)
- GO
-
- create procedure sp_MScreate_distributor_tables
- as
- declare @profile_id int
- declare @retcode int
- declare @profile_name nvarchar(100)
- declare @profile_desc nvarchar(100)
-
- /* Create MSpublishers table */
- IF EXISTS (SELECT * FROM msdb..sysobjects WHERE name = 'MSdistpublishers'
- and xtype = 'U')
- begin
- DROP TABLE msdb..MSdistpublishers
- if @@error<> 0 goto FAILURE
- end
-
- /* Create MSdistributiondbs table */
- IF EXISTS (SELECT * FROM msdb..sysobjects WHERE name = 'MSdistributiondbs'
- and xtype = 'U')
- begin
- DROP TABLE msdb..MSdistributiondbs
- if @@error<> 0 goto FAILURE
- end
-
- /* create MSdistributor table */
- IF EXISTS (SELECT * FROM msdb..sysobjects WHERE name = 'MSdistributor'
- and xtype = 'U')
- begin
- DROP TABLE msdb..MSdistributor
- if @@error<> 0 goto FAILURE
- end
-
- /* create sysreplicationalerts table */
- IF EXISTS (SELECT * FROM msdb..sysobjects WHERE name = 'sysreplicationalerts'
- and xtype = 'U')
- begin
- DROP TABLE msdb..sysreplicationalerts
- if @@error<> 0 goto FAILURE
- end
-
- /* create MSagent_profiles table */
- IF EXISTS (SELECT * FROM msdb..sysobjects WHERE name = 'MSagent_profiles'
- and xtype = 'U')
- begin
- DROP TABLE msdb..MSagent_profiles
- if @@error<> 0 goto FAILURE
- end
-
- /* create MSagent_parameters table */
- IF EXISTS (SELECT * FROM msdb..sysobjects WHERE name = 'MSagent_parameters'
- and xtype = 'U')
- begin
- DROP TABLE msdb..MSagent_parameters
- if @@error<> 0 goto FAILURE
- end
-
- /* create MSdatatype_mappings table */
- IF EXISTS (SELECT * FROM msdb..sysobjects WHERE name = 'MSdatatype_mappings'
- and xtype = 'U')
- begin
- DROP TABLE msdb..MSdatatype_mappings
- if @@error<> 0 goto FAILURE
- end
-
-
- CREATE TABLE msdb.dbo.MSdistpublishers
- (
- name sysname NOT NULL,
- distribution_db sysname NOT NULL,
- working_directory nvarchar(255) NOT NULL,
- security_mode int NOT NULL,
- login sysname NOT NULL,
- password nvarchar(524) NULL,
- active bit NOT NULL,
- trusted bit NOT NULL,
- thirdparty_flag bit NOT NULL
- )
- if @@error<> 0 goto FAILURE
-
- CREATE UNIQUE CLUSTERED INDEX uc1MSdistpublishers
- ON msdb.dbo.MSdistpublishers(name)
- if @@error<> 0 goto FAILURE
-
-
- CREATE TABLE msdb.dbo.MSdistributiondbs
- (
- name sysname NOT NULL,
- min_distretention int NOT NULL,
- max_distretention int NOT NULL,
- history_retention int NOT NULL
- )
- if @@error<> 0 goto FAILURE
-
- CREATE UNIQUE CLUSTERED INDEX uc1MSdistributiondbs
- ON msdb.dbo.MSdistributiondbs(name)
- if @@error<> 0 goto FAILURE
-
-
-
- CREATE TABLE msdb.dbo.MSdistributor
- (
- property sysname NOT NULL,
- value nvarchar(3000) NULL
- )
- if @@error<> 0 goto FAILURE
-
- CREATE UNIQUE CLUSTERED INDEX uc1MSdistributor
- ON msdb.dbo.MSdistributor(property)
- if @@error<> 0 goto FAILURE
-
- CREATE TABLE msdb.dbo.sysreplicationalerts
- (
- alert_id int identity(1,1) NOT NULL,
- status int NOT NULL,
- agent_type int NULL,
- agent_id int NULL,
- error_id int NULL,
- alert_error_code int NULL,
- time datetime NOT NULL,
- publisher sysname NULL,
- publisher_db sysname NULL,
- publication sysname NULL,
- publication_type int NULL,
- subscriber sysname NULL,
- subscriber_db sysname NULL,
- article sysname NULL,
- destination_object sysname NULL,
- source_object sysname NULL,
- alert_error_text ntext NULL
- )
- if @@error<> 0 goto FAILURE
-
- CREATE UNIQUE CLUSTERED INDEX ucsysreplicationalerts ON msdb.dbo.sysreplicationalerts(alert_id)
- if @@error<> 0 goto FAILURE
-
- CREATE TABLE msdb.dbo.MSagent_profiles
- (
- profile_id int NOT NULL IDENTITY,
- profile_name sysname NOT NULL,
- agent_type int NOT NULL, -- 1-Snapshot, 2-Logreader,
- -- 3-Distribution, 4-Merge,
- -- 9-Qreader
- type int NOT NULL, -- 0-System, 1-Custom
- description nvarchar(3000) NULL,
- def_profile bit NOT NULL
- )
- if @@error<> 0 goto FAILURE
-
-
- CREATE UNIQUE CLUSTERED INDEX ucMSagent_profiles ON msdb.dbo.MSagent_profiles
- (profile_name, profile_id, agent_type)
- if @@error<> 0 goto FAILURE
-
- CREATE TABLE msdb.dbo.MSagent_parameters
- (
- profile_id int NOT NULL,
- parameter_name sysname NOT NULL,
- value nvarchar(255) NOT NULL
- )
- if @@error<> 0 goto FAILURE
-
- CREATE UNIQUE CLUSTERED INDEX ucMSagent_parameters ON msdb.dbo.MSagent_parameters
- (parameter_name, profile_id)
- if @@error<> 0 goto FAILURE
-
- /*
- ** Create default / non default profiles
- ** for all the agents
- */
-
- /*
- ** Snapshot agent
- */
- set @profile_id = NULL
- set @profile_name = formatmessage(20545) -- Default Snapshot Profile
- set @profile_desc = NULL
-
- exec @retcode = dbo.sp_add_agent_profile
- @profile_id = @profile_id OUT,
- @profile_name = @profile_name,
- @agent_type = 1, -- 1-Snapshot, 2-Logreader, 3-Distribution, 4-Merge
- @profile_type = 0, -- 0-System, 1-Custom
- @description = @profile_desc,
- @default = 1
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_generate_agent_parameter @profile_id
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- /*
- ** Logreader agent
- */
- set @profile_id = NULL
- set @profile_name = formatmessage(20545) -- Default LogReader Profile
- set @profile_desc = NULL
-
- exec @retcode = dbo.sp_add_agent_profile
- @profile_id = @profile_id OUT,
- @profile_name = @profile_name,
- @agent_type = 2, -- 1-Snapshot, 2-Logreader, 3-Distribution, 4-Merge
- @profile_type = 0, -- 0-System, 1-Custom
- @description = @profile_desc,
- @default = 1
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_generate_agent_parameter @profile_id
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- /*
- ** Logreader agent - Verbose History Profile
- */
- set @profile_id = NULL
- set @profile_name = formatmessage(20546) -- LogReader Verbose History Profile
- set @profile_desc = formatmessage(20547)
-
- exec @retcode = dbo.sp_add_agent_profile
- @profile_id = @profile_id OUT,
- @profile_name = @profile_name,
- @agent_type = 2, -- 1-Snapshot, 2-Logreader, 3-Distribution, 4-Merge
- @profile_type = 0, -- 0-System, 1-Custom
- @description = @profile_desc,
- @default = 0
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_generate_agent_parameter @profile_id
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- /*
- ** Distribution agent
- */
- set @profile_id = NULL
- set @profile_name = formatmessage(20545) -- Default Distribution Profile
- set @profile_desc = NULL
-
- exec @retcode = dbo.sp_add_agent_profile
- @profile_id = @profile_id OUT,
- @profile_name = @profile_name,
- @agent_type = 3, -- 1-Snapshot, 2-Logreader, 3-Distribution, 4-Merge
- @profile_type = 0, -- 0-System, 1-Custom
- @description = @profile_desc,
- @default = 1
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_generate_agent_parameter @profile_id
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- /*
- ** Distribution Agent Verbose History Profile
- */
- set @profile_id = NULL
- set @profile_name = formatmessage(20546) -- Distribution Verbose History Profile
- set @profile_desc = formatmessage(20547)
-
- exec @retcode = dbo.sp_add_agent_profile
- @profile_id = @profile_id OUT,
- @profile_name = @profile_name,
- @agent_type = 3, -- 1-Snapshot, 2-Logreader, 3-Distribution, 4-Merge
- @profile_type = 0, -- 0-System, 1-Custom
- @description = @profile_desc,
- @default = 0
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_generate_agent_parameter @profile_id
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- /*
- ** Merge agent : Default profile for well connected scenarios
- */
- set @profile_id = NULL
- set @profile_name = formatmessage(20545) -- Default Merge Profile
- set @profile_desc = NULL
-
- exec @retcode = dbo.sp_add_agent_profile
- @profile_id = @profile_id OUT,
- @profile_name = @profile_name,
- @agent_type = 4, -- 1-Snapshot, 2-Logreader, 3-Distribution, 4-Merge
- @profile_type = 0, -- 0-System, 1-Custom
- @description = @profile_desc,
- @default = 1
-
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_generate_agent_parameter @profile_id
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- /*
- ** Merge agent : Non default profile for disconnected scenarios ( unreliable link )
- */
- set @profile_id = NULL
- set @profile_name = formatmessage(20548) -- Non-Default Merge Profile
- set @profile_desc = formatmessage(20549)
-
- exec @retcode = dbo.sp_add_agent_profile
- @profile_id = @profile_id OUT,
- @profile_name = @profile_name,
- @agent_type = 4, -- 1-Snapshot, 2-Logreader, 3-Distribution, 4-Merge
- @profile_type = 0, -- 0-System, 1-Custom
- @description = @profile_desc,
- @default = 0
-
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_generate_agent_parameter @profile_id
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- /*
- ** Merge agent : Non default profile for verbose histroy
- */
- set @profile_id = NULL
- set @profile_name = formatmessage(20546) -- Verbose Merge Profile
- set @profile_desc = formatmessage(20547)
-
- exec @retcode = dbo.sp_add_agent_profile
- @profile_id = @profile_id OUT,
- @profile_name = @profile_name,
- @agent_type = 4, -- 1-Snapshot, 2-Logreader, 3-Distribution, 4-Merge
- @profile_type = 0, -- 0-System, 1-Custom
- @description = @profile_desc,
- @default = 0
-
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_generate_agent_parameter @profile_id
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- /*
- ** Merge agent : Synchronization Manager Profile
- */
- set @profile_id = NULL
- set @profile_name = formatmessage(20550) -- SyncMgr Profile
- set @profile_desc = formatmessage(20551)
-
- exec @retcode = dbo.sp_add_agent_profile
- @profile_id = @profile_id OUT,
- @profile_name = @profile_name,
- @agent_type = 4, -- 1-Snapshot, 2-Logreader, 3-Distribution, 4-Merge
- @profile_type = 0, -- 0-System, 1-Custom
- @description = @profile_desc,
- @default = 0
-
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_generate_agent_parameter @profile_id
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- /*
- ** Distribution agent : Synchronization Manager Profile
- */
- set @profile_id = NULL
- set @profile_name = formatmessage(20550) -- SyncMgr Profile
- set @profile_desc = formatmessage(20551)
-
- exec @retcode = dbo.sp_add_agent_profile
- @profile_id = @profile_id OUT,
- @profile_name = @profile_name,
- @agent_type = 3, -- 1-Snapshot, 2-Logreader, 3-Distribution, 4-Merge
- @profile_type = 0, -- 0-System, 1-Custom
- @description = @profile_desc,
- @default = 0
-
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_generate_agent_parameter @profile_id
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- /*
- ** Qreader agent (default profile)
- */
- set @profile_id = NULL
- set @profile_name = formatmessage(20545) -- Default QueueReader Profile
- set @profile_desc = formatmessage(20589)
-
- exec @retcode = dbo.sp_add_agent_profile
- @profile_id = @profile_id OUT,
- @profile_name = @profile_name,
- @agent_type = 9,
- @profile_type = 0,
- @description = @profile_desc,
- @default = 1
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_generate_agent_parameter @profile_id
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- /*
- ** Merge agent : Rowcount Validation profile
- */
- set @profile_id = NULL
- set @profile_name = formatmessage(21308) -- Rowcount Validation Profile
- set @profile_desc = formatmessage(21309) -- Rowcount Validation Profile Description
-
- exec @retcode = dbo.sp_add_agent_profile
- @profile_id = @profile_id OUT,
- @profile_name = @profile_name,
- @agent_type = 4, -- 1-Snapshot, 2-Logreader, 3-Distribution, 4-Merge
- @profile_type = 0, -- 0-System, 1-Custom
- @description = @profile_desc,
- @default = 0
-
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_generate_agent_parameter @profile_id
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- /*
- ** Merge agent : Rowcount & Checksum Validation profile
- */
- set @profile_id = NULL
- set @profile_name = formatmessage(21310) -- Rowcount & Checksum Validation Profile
- set @profile_desc = formatmessage(21311) -- Rowcount & Checksum Validation Profile Description
-
- exec @retcode = dbo.sp_add_agent_profile
- @profile_id = @profile_id OUT,
- @profile_name = @profile_name,
- @agent_type = 4, -- 1-Snapshot, 2-Logreader, 3-Distribution, 4-Merge
- @profile_type = 0, -- 0-System, 1-Custom
- @description = @profile_desc,
- @default = 0
-
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_generate_agent_parameter @profile_id
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
-
- /*
- ** Distribution agent, skip error profile
- */
- set @profile_id = NULL
- set @profile_name = formatmessage(20599) -- Default Distribution Profile
- set @profile_desc = formatmessage(20600)
-
- exec @retcode = dbo.sp_add_agent_profile
- @profile_id = @profile_id OUT,
- @profile_name = @profile_name,
- @agent_type = 3, -- 1-Snapshot, 2-Logreader, 3-Distribution, 4-Merge
- @profile_type = 0, -- 0-System, 1-Custom
- @description = @profile_desc,
- @default = 0
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_generate_agent_parameter @profile_id
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- /*
- ** Merge agent : High volume server-to-server profile
- */
- set @profile_id = NULL
- set @profile_name = formatmessage(20616) -- High volume server-to-server profile
- set @profile_desc = formatmessage(20617) -- High volume server-to-server profile Description
-
- exec @retcode = dbo.sp_add_agent_profile
- @profile_id = @profile_id OUT,
- @profile_name = @profile_name,
- @agent_type = 4, -- 1-Snapshot, 2-Logreader, 3-Distribution, 4-Merge
- @profile_type = 0, -- 0-System, 1-Custom
- @description = @profile_desc,
- @default = 0
-
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_generate_agent_parameter @profile_id
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- create table msdb.dbo.MSdatatype_mappings
- (
- dbms_name sysname NOT NULL,
- sql_type sysname NOT NULL,
- dest_type sysname NOT NULL,
- dest_prec int NOT NULL,
- dest_create_params int NOT NULL,
- dest_nullable bit NOT NULL
- )
-
- -- MS Jet
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'binary' , 'binary', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'varbinary' , 'varbinary', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'binary' , 'image', 1073741824, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'varbinary' , 'image', 1073741824, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'sql_variant' , 'longtext', 1073741824, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'varchar' , 'varchar', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'varchar' , 'longtext', 1073741824, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'nchar' , 'nchar', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'nchar' , 'longtext', 1073741824, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'char' , 'char', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'char' , 'longtext', 1073741824, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'nvarchar' , 'nchar varying', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'nvarchar' , 'longtext', 1073741824, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'datetime' , 'datetime', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'smalldatetime' , 'datetime', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'decimal' , 'decimal', 255, 3, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'numeric' , 'decimal', 255, 3, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'float' , 'float', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'real' , 'real', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'bigint' , 'decimal', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'int' , 'int', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'smallint' , 'smallint', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'tinyint' , 'byte', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'money' , 'currency', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'smallmoney' , 'currency', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'bit' , 'bit', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'sysname' , 'nchar varying', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'timestamp' , 'binary', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'uniqueidentifier' , 'guid', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'text' , 'longtext', 1073741824, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'ntext' , 'longtext', 1073741824, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS Jet', 'image' , 'image', 1073741824, 0, 1
-
- -- Oracle
- exec dbo.sp_add_datatype_mapping 'Oracle', 'binary' , 'raw', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'varbinary' , 'raw', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'binary' , 'long raw', 2147483647, 0, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'varbinary' , 'long raw', 2147483647, 0, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'sql_variant' , 'long', 2147483647, 0, 1
- --exec dbo.sp_add_datatype_mapping 'Oracle', 'varchar' , 'char', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'varchar' , 'varchar2', 2000, 4, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'varchar' , 'long', 2147483647, 0, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'nchar' , 'char', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'nchar' , 'varchar2', 2000, 4, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'nchar' , 'long', 2147483647, 0, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'char' , 'char', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'char' , 'varchar2', 2000, 4, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'char' , 'long', 2147483647, 0, 1
- --exec dbo.sp_add_datatype_mapping 'Oracle', 'nvarchar' , 'char', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'nvarchar' , 'varchar2', 2000, 4, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'nvarchar' , 'long', 2147483647, 0, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'datetime' , 'date', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'smalldatetime' , 'date', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'decimal' , 'number', 255, 3, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'numeric' , 'number', 255, 3, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'float' , 'float', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'real' , 'float', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'bigint' , 'number', 255, 3, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'int' , 'number', 255, 3, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'smallint' , 'number', 255, 3, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'tinyint' , 'number', 255, 3, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'money' , 'number', 255, 3, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'smallmoney' , 'number', 255, 3, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'bit' , 'number', 255, 3, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'sysname' , 'char', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'timestamp' , 'raw', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'uniqueidentifier' , 'char', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'text' , 'long', 2147483647, 0, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'ntext' , 'long', 2147483647, 0, 1
- exec dbo.sp_add_datatype_mapping 'Oracle', 'image' , 'long raw', 2147483647, 0, 1
-
- -- MS SSCE
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'binary' , 'binary', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'varbinary' , 'varbinary', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'binary' , 'image', 1073741824, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'varbinary' , 'image', 1073741824, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'sql_variant' , 'ntext', 1073741824, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'varchar' , 'national char varying', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'varchar' , 'ntext', 1073741824, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'nchar' , 'nchar', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'nchar' , 'ntext', 1073741824, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'char' , 'nchar', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'char' , 'ntext', 1073741824, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'nvarchar' , 'national char varying', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'nvarchar' , 'ntext', 1073741824, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'datetime' , 'datetime', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'smalldatetime' , 'datetime', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'decimal' , 'numeric', 255, 3, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'numeric' , 'numeric', 255, 3, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'float' , 'float', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'real' , 'real', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'bigint' , 'bigint', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'int' , 'int', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'smallint' , 'smallint', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'tinyint' , 'tinyint', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'money' , 'money', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'smallmoney' , 'money', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'bit' , 'bit', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'sysname' , 'national char varying', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'timestamp' , 'binary', 255, 4, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'uniqueidentifier' , 'uniqueidentifier', 255, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'text' , 'ntext', 1073741824, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'ntext' , 'ntext', 1073741824, 0, 1
- exec dbo.sp_add_datatype_mapping 'MS SSCE', 'image' , 'image', 1073741824, 0, 1
-
- --DB2/400
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'bit', 'SMALLINT', 1, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'tinyint', 'SMALLINT', 3, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'smallint', 'SMALLINT', 5, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'int', 'INT', 10, 0, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'char', 'CHAR', 8000, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'varchar', 'VARCHAR', 8000, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'smalldatetime', 'TIMESTAMP', 26, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'datetime', 'TIMESTAMP', 26, 0, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'real', 'REAL', 24, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'decimal', 'DECIMAL', 31, 3, 1
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'double precision', 'DOUBLE', 53, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'float', 'FLOAT', 53, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'numeric', 'NUMERIC', 31, 3, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'smallmoney', 'DECIMAL', 10, 3, 1
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'money', 'DECIMAL', 19, 3, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'varbinary', 'VARCHAR () FOR BIT DATA', 8000, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'binary', 'CHAR () FOR BIT DATA', 8000, 4, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'timestamp', 'CHAR () FOR BIT DATA', 8, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'uniqueidentifier', 'CHAR', 38, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'image', 'VARCHAR () FOR BIT DATA', 32739, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/400', 'text', 'VARCHAR', 32739, 4, 1
-
- --DB2/MVS
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'bit', 'SMALLINT', 1, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'tinyint', 'SMALLINT', 3, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'smallint', 'SMALLINT', 5, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'int', 'INT', 10, 0, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'char', 'CHAR', 254, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'varchar', 'VARCHAR', 4045, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'char', 'VARCHAR', 4045, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'smalldatetime', 'TIMESTAMP', 26, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'datetime', 'TIMESTAMP', 26, 0, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'real', 'REAL', 24, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'decimal', 'DECIMAL', 31, 3, 1
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'double precision', 'DOUBLE', 53, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'float', 'FLOAT', 53, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'numeric', 'NUMERIC', 31, 3, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'smallmoney', 'DECIMAL', 10, 3, 1
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'money', 'DECIMAL', 19, 3, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'varbinary', 'VARCHAR () FOR BIT DATA', 4045, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'binary', 'CHAR () FOR BIT DATA', 254, 4, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'timestamp', 'CHAR () FOR BIT DATA', 8, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'uniqueidentifier', 'CHAR', 38, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'image', 'VARCHAR () FOR BIT DATA', 4045, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/MVS', 'text', 'VARCHAR', 4045, 4, 1
-
- --DB2/NT
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'bit', 'SMALLINT', 1, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'tinyint', 'SMALLINT', 3, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'smallint', 'SMALLINT', 5, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'int', 'INT', 10, 0, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'char', 'CHAR', 254, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'varchar', 'VARCHAR', 4000, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'char', 'VARCHAR', 4000, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'smalldatetime', 'TIMESTAMP', 26, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'datetime', 'TIMESTAMP', 26, 0, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'real', 'REAL', 24, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'decimal', 'DECIMAL', 31, 3, 1
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'double precision', 'DOUBLE', 53, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'float', 'FLOAT', 53, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'numeric', 'NUMERIC', 31, 3, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'smallmoney', 'DECIMAL', 10, 3, 1
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'money', 'DECIMAL', 19, 3, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'varbinary', 'VARCHAR () FOR BIT DATA', 4000, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'binary', 'CHAR () FOR BIT DATA', 254, 4, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'timestamp', 'CHAR () FOR BIT DATA', 8, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'uniqueidentifier', 'CHAR', 38, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'image', 'VARCHAR () FOR BIT DATA', 4000, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/NT', 'text', 'VARCHAR', 4000, 4, 1
-
- --DB2/6000
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'bit', 'SMALLINT', 1, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'tinyint', 'SMALLINT', 3, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'smallint', 'SMALLINT', 5, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'int', 'INT', 10, 0, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'char', 'CHAR', 254, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'varchar', 'VARCHAR', 4000, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'char', 'VARCHAR', 4000, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'smalldatetime', 'TIMESTAMP', 26, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'datetime', 'TIMESTAMP', 26, 0, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'real', 'REAL', 24, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'decimal', 'DECIMAL', 31, 3, 1
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'double precision', 'DOUBLE', 53, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'float', 'FLOAT', 53, 0, 1
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'numeric', 'NUMERIC', 31, 3, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'smallmoney', 'DECIMAL', 10, 3, 1
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'money', 'DECIMAL', 19, 3, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'varbinary', 'VARCHAR () FOR BIT DATA', 4000, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'binary', 'CHAR () FOR BIT DATA', 254, 4, 1
-
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'timestamp', 'CHAR () FOR BIT DATA', 8, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'uniqueidentifier', 'CHAR', 38, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'image', 'VARCHAR () FOR BIT DATA', 4000, 4, 1
- exec dbo.sp_add_datatype_mapping 'DB2/6000', 'text', 'VARCHAR', 4000, 4, 1
-
- return 0
- FAILURE:
- return 1
- go
-
- dump tran master with no_log
- GO
-
- /*
- ** Create replication stored procedures and functions.
- ** Part 2: create all other stored procedures and functions.
- */
- --
- -- Name: fn_getpersistedservernamecasevariation
- --
- -- Description: A simple function for getting the case variation of a
- -- server name as persisted in master..sysservers. For
- -- example, if sErVeRnAmE is what is being persisted
- -- as a srvname in sysservers
- --
- -- select fn_getpersistedservernamecasevariation('SERVERNAME')
- -- select fn_getpersistedservernamecasevariation('servername')
- --
- -- will all return the string 'sErVeRnAmE'
- --
- -- Parameter: @servername sysname (mandatory)
- --
- -- Notes: This function will return null if the specified server name
- -- does not match any srvname's in master..sysservers in a
- -- case insensitive manner.
- --
- -- Security: Admin access only
- --
- raiserror('Creating function fn_getpersistedservernamecasevariation', 0,1)
- go
- create function system_function_schema.fn_getpersistedservernamecasevariation (
- @servername sysname
- ) returns sysname
- as
- begin
-
- declare @real_servername sysname
- select @real_servername = null
- select @real_servername = srvname
- from master.dbo.sysservers
- where upper(@servername) = upper(srvname) collate database_default
-
- return @real_servername
- end
- go
-
- raiserror('Creating procedure sp_MSIfExistsRemoteLogin', 0,1)
- GO
-
- CREATE proc sp_MSIfExistsRemoteLogin
- @remotesrvname sysname,
- @locallgname sysname,
- @remotelgname sysname
- AS
- begin
-
-
- if (@locallgname IS NULL)
- begin
- IF EXISTS (SELECT * FROM master.dbo.sysremotelogins srl, master.dbo.sysservers ss
- WHERE UPPER(ss.srvname) = UPPER(@remotesrvname) collate database_default AND
- srl.remoteserverid = ss.srvid AND
- (srl.remoteusername = @remotelgname OR
- (srl.remoteusername IS NULL AND srl.sid = 0x2)))
- return (1)
- else
- return (0)
- end
-
- if exists (SELECT * FROM master.dbo.sysremotelogins srl, master.dbo.sysservers ss
- WHERE UPPER(ss.srvname) = UPPER(@remotesrvname) collate database_default AND
- srl.remoteserverid = ss.srvid AND
- srl.remoteusername = @remotelgname AND
- srl.sid = suser_sid(@locallgname))
- return (1)
- else
- return (0)
- end
- go
-
- raiserror('Creating procedure sp_helppublicationsync', 0,1)
- GO
-
- CREATE PROCEDURE sp_helppublicationsync (
- @publication sysname /* The publication name */
- ) AS
- SET NOCOUNT ON
- RAISERROR (21023, 16, -1,'sp_helppublicationsync')
- RETURN(1)
- GO
-
- raiserror('Creating procedure sp_MSreplrole', 0,1)
- GO
- create procedure sp_MSreplrole
- @name sysname,
- @operation nvarchar(4)
- as
- declare @retcode int
- -- Add/Drop when proper.
- if @operation = 'add'
- begin
- if user_id(@name) is null
- begin
- exec @retcode = dbo.sp_addrole @name
- IF @@ERROR <> 0 or @retcode <> 0
- RETURN (1)
- end
- end
- else if @operation = 'drop'
- begin
- if user_id(@name) is not null
- begin
- exec @retcode = dbo.sp_droprole @name
- IF @@ERROR <> 0 or @retcode <> 0
- RETURN (1)
- end
- end
- go
-
- dump tran master with no_log
- GO
-
- raiserror('Creating procedure sp_addpublication_snapshot', 0,1)
- GO
-
- CREATE PROCEDURE sp_addpublication_snapshot (
- @publication sysname,
- @frequency_type int = 4 , /* 4== Daily */
- @frequency_interval int = 1, /* Every day */
- @frequency_subday int = 4, /* Sub interval = Minute */
- @frequency_subday_interval int = 5, /* Every five minutes */
- @frequency_relative_interval int = 1,
- @frequency_recurrence_factor int = 0,
- @active_start_date int = 0,
- @active_end_date int = 99991231 ,
- @active_start_time_of_day int = 0,
- @active_end_time_of_day int = 235959,
- @snapshot_job_name nvarchar(100) = NULL
- ) AS
-
- SET NOCOUNT ON
-
- /*
- ** Declarations.
- */
- DECLARE @retcode int
- DECLARE @newid int
- DECLARE @mergepublish_bit smallint
- DECLARE @transpublish_bit int
- DECLARE @transpub_found bit
- DECLARE @mergepub_found bit
- DECLARE @newagentid int
-
- /*
- ** Initializations
- */
- select @mergepublish_bit = 4
- select @transpublish_bit = 1
- select @transpub_found = 0
- select @mergepub_found = 0
-
- /*
- ** Parameter Check
- */
- exec @retcode = dbo.sp_MSreplcheck_name @publication
- if @@ERROR <> 0 or @retcode <> 0
- return(1)
-
- /*
- ** Security Check
- */
- exec @retcode = dbo.sp_MSreplcheck_publish
- if @@ERROR <> 0 or @retcode <> 0
- return(1)
-
- /*
- ** Check if the publication is valid.
- ** 1. Check transaction-level publications
- ** 2. Check merge publications
- */
- if (select category & @transpublish_bit from master..sysdatabases where name = DB_NAME() collate database_default) <> 0
- begin
- EXEC @retcode = dbo.sp_MSaddpub_snapshot @publication ,
- @frequency_type,
- @frequency_interval,
- @frequency_subday,
- @frequency_subday_interval,
- @frequency_relative_interval,
- @frequency_recurrence_factor,
- @active_start_date,
- @active_end_date,
- @active_start_time_of_day,
- @active_end_time_of_day,
- @newagentid OUTPUT,
- @snapshot_job_name
-
- IF @retcode <> 0 and @@ERROR <> 0
- BEGIN
- RETURN (1)
- END
-
- if @newagentid <> 0
- begin
- select @transpub_found = 1
- goto DONE
- end
-
- end
-
- if (select category & @mergepublish_bit from master..sysdatabases where name = DB_NAME() collate database_default) <> 0
- begin
- EXEC @retcode = dbo.sp_MSaddmergepub_snapshot @publication ,
- @frequency_type,
- @frequency_interval,
- @frequency_subday,
- @frequency_subday_interval,
- @frequency_relative_interval,
- @frequency_recurrence_factor,
- @active_start_date,
- @active_end_date,
- @active_start_time_of_day,
- @active_end_time_of_day,
- @newagentid OUTPUT,
- @snapshot_job_name
-
- IF @retcode <> 0 and @@ERROR <> 0
- BEGIN
- RETURN (1)
- END
-
- if @newagentid <> 0
- begin
- select @mergepub_found = 1
- goto DONE
- end
- end
-
- DONE:
- if @transpub_found = 0 and @mergepub_found = 0
- begin
- RAISERROR (15001, 11, -1, @publication)
- RETURN (1)
- end
- return (0)
- GO
-
- raiserror('Creating procedure sp_MShelpobjectpublications', 0,1)
- GO
-
- create procedure sp_MShelpobjectpublications (@object_name sysname)
- AS
- /*
- ** Declarations.
- */
- DECLARE @retcode int
- DECLARE @mergepublish_bit smallint
- DECLARE @transpublish_bit int
-
- declare @object_id int
-
- /*
- ** Initializations
- */
- select @mergepublish_bit = 4
- select @transpublish_bit = 1
- select @object_id = OBJECT_ID(@object_name)
-
- create table #helpobjpubs (
- publication sysname collate database_default not null,
- reptype int NOT NULL,
- article sysname collate database_default not null,
- article_type int NULL,
- column_tracking int NULL,
- article_resolver nvarchar(255) collate database_default null,
- identity_support int NULL,
- resolver_clsid nvarchar(50) NULL,
- resolver_info nvarchar(255) NULL,
- verify_resolver_signature int NULL,
- allow_interactive_resolver bit NULL,
- fast_multicol_updateproc bit NULL,
- check_permissions int NULL)
- /*
- ** 1. Return the transactional publications that the table is involved in
- */
- if (select category & @transpublish_bit from master..sysdatabases where name = DB_NAME() collate database_default) <> 0
- begin
- if exists (select * from sysextendedarticlesview a,
- syspublications p where a.pubid = p.pubid and a.objid = @object_id)
- begin
- insert into #helpobjpubs(publication, reptype, article, article_type)
- select p.name, 1, a.name, a.type from sysextendedarticlesview a,
- syspublications p where a.pubid = p.pubid and a.objid = @object_id
- IF @@ERROR <> 0
- BEGIN
- select @retcode = 1
- goto DONE
- END
- end
- end
- /*
- ** 2. Return the merge publications that the table is involved in
- */
- if exists (select * from sysobjects where name='sysmergepublications')
- begin
- if exists (select * from sysmergeextendedarticlesview a,
- sysmergepublications p where a.pubid = p.pubid and a.objid = @object_id)
- begin
- insert into #helpobjpubs (publication, reptype, article, article_type, column_tracking, article_resolver,
- identity_support, resolver_clsid, resolver_info, verify_resolver_signature, allow_interactive_resolver,
- fast_multicol_updateproc, check_permissions)
- select p.name, 2, a.name, a.type, a.column_tracking, a.article_resolver, a.identity_support,
- a.resolver_clsid, a.resolver_info, a.verify_resolver_signature, a.allow_interactive_resolver,
- a.fast_multicol_updateproc, a.check_permissions
- from sysmergeextendedarticlesview a, sysmergepublications p
- where a.pubid = p.pubid and a.objid = @object_id
- IF @@ERROR <> 0
- BEGIN
- select @retcode = 1
- goto DONE
- END
- end
- end
- select @retcode = 0
-
- DONE:
- select * from #helpobjpubs
- drop table #helpobjpubs
- return (@retcode)
- go
-
- raiserror('Creating procedure sp_helpreplicationdb', 0,1)
- GO
-
- CREATE PROCEDURE sp_helpreplicationdb
- @dbname sysname = '%', @type sysname = 'pub'
- AS
-
- SET NOCOUNT ON
-
- /*
- ** Declarations.
- */
-
- DECLARE @retcode int, @typebit int
-
- if (lower(@type collate SQL_Latin1_General_CP1_CS_AS) like 'pub%')
- select @typebit = 1
- else if (lower(@type collate SQL_Latin1_General_CP1_CS_AS) like 'sub%')
- select @typebit = 2
- else
- begin
- raiserror(14091,-1,-1)
- return 1
- end
-
- /*
- ** Parameter Check: @dbname.
- ** Check to make sure that the database name conforms to the rules
- ** for identifiers.
- */
-
- IF @dbname <> '%'
- BEGIN
- EXECUTE @retcode = dbo.sp_validname @dbname
-
- IF @@ERROR <> 0 OR @retcode <> 0
- RETURN (1)
- END
-
- /*
- ** Show databases with this option enabled.
- */
-
- SELECT name
- FROM master..sysdatabases
- WHERE ((@dbname = N'%') or (name = @dbname collate database_default))
- AND (category & @typebit) <> 0
- go
-
-
- raiserror('Creating procedure sp_helpdistributor', 0,1)
- go
-
- CREATE PROCEDURE sp_helpdistributor (
- @distributor sysname = '%' OUTPUT, /* The distribution server name */
- @distribdb sysname = '%' OUTPUT, /* The distribution database */
- @directory nvarchar(255) = '%' OUTPUT, /* The working directory */
- @account nvarchar(255) = '%' OUTPUT, /* The Windows NT user account */
- @min_distretention int = -1 OUTPUT, /* The min distribution retention */
- @max_distretention int = -1 OUTPUT, /* The min distribution retention */
- @history_retention int = -1 OUTPUT, /* The history retention period */
- @history_cleanupagent nvarchar(100) = '%' OUTPUT, /* The history cleanup agent */
- @distrib_cleanupagent nvarchar(100) = '%' OUTPUT, /* The distribution cleanup agent */
- @publisher sysname = NULL, /* Name of publisher */
- @local nvarchar(5) = NULL, /* Get local server values */
- @rpcsrvname sysname = '%' OUTPUT
- ) AS
- SET NOCOUNT ON
-
- /*
- ** Declarations.
- */
- DECLARE @loc_distributor sysname
- DECLARE @loc_distribdb sysname
- DECLARE @loc_directory nvarchar(255)
- DECLARE @loc_account nvarchar(255)
- DECLARE @loc_mindistretention int
- DECLARE @loc_maxdistretention int
- DECLARE @loc_historyretention int
- DECLARE @loc_historycleanupagent nvarchar(100)
- DECLARE @loc_distribcleanupagent nvarchar(100)
- DECLARE @loc_security_mode int
- DECLARE @loc_login sysname
- DECLARE @loc_password sysname
- declare @loc_rpcsrvname sysname
- DECLARE @proc nvarchar(255)
- DECLARE @reg_key nvarchar (255)
- DECLARE @retcode int
- declare @rpcsrvlogin sysname
- declare @srvid smallint
- declare @dist_rpcname sysname
- declare @platform_nt binary
-
- select @platform_nt = 0x1
-
- IF @publisher IS NULL
- BEGIN
- /*
- ** 6.x compatibility
- ** If local is set, we know the call is from a publisher.
- ** set it to be @@REMSERVER
- ** Otherwise, set it to be local server name
- ** Note: @@REMSERVER is NULL for local sp calls
- */
- IF LOWER(@local) = 'local' AND @@REMSERVER IS NOT NULL
- SELECT @publisher = @@REMSERVER
- ELSE
- SELECT @publisher = @@SERVERNAME
- END
-
- /*
- ** Get the distribution server
- */
- SELECT @dist_rpcname = srvname, @loc_distributor = datasource, @srvid = srvid, @loc_rpcsrvname = srvname
- FROM master..sysservers
- WHERE srvstatus & 8 <> 0
-
- if @loc_distributor is null
- GOTO DONE
-
- select @rpcsrvlogin = name from master.dbo.sysxlogins where
- srvid = @srvid and sid is NULL
-
- /*
- ** If remote distribuiton, execute dbo.sp_helpdistributor on distribution
- ** server.
- */
- IF UPPER(@loc_distributor) <> UPPER(@@SERVERNAME)
- BEGIN
- SELECT @proc = @dist_rpcname + '.master.dbo.sp_helpdistributor'
- EXECUTE @retcode = @proc
- @loc_distributor OUTPUT,
- @loc_distribdb OUTPUT,
- @loc_directory OUTPUT,
- @loc_account OUTPUT,
- @loc_mindistretention OUTPUT,
- @loc_maxdistretention OUTPUT,
- @loc_historyretention OUTPUT,
- @loc_historycleanupagent OUTPUT,
- @loc_distribcleanupagent OUTPUT,
- @@SERVERNAME,
- @local = 'local'
- IF @retcode <> 0 or @@ERROR <> 0
- RETURN (1)
-
- GOTO DONE
- END
-
- SELECT @loc_distribdb = distribution_db,
- @loc_directory = working_directory
- FROM msdb.dbo.MSdistpublishers WHERE UPPER(name) = UPPER(@publisher) collate database_default
-
- IF @@ERROR <> 0
- RETURN 1 ;
-
- SELECT @loc_mindistretention = min_distretention,
- @loc_maxdistretention = max_distretention,
- @loc_historyretention = history_retention
- FROM msdb.dbo.MSdistributiondbs WHERE name = @loc_distribdb collate database_default
-
- /*
- ** Fetch the distribution account name.
- */
- IF ((@distributor = '%' AND @distribdb = '%' AND @directory = '%'
- AND @account = '%' AND @min_distretention = -1 AND @max_distretention = -1
- AND @history_retention = -1 AND @history_cleanupagent = '%'
- AND @distrib_cleanupagent = '%' )
- OR @account IS NULL) and ( platform() & @platform_nt = @platform_nt )
- BEGIN
-
- declare @instance sysname
- declare @regkey nvarchar(260)
- select @instance = convert(sysname, SERVERPROPERTY('InstanceName'))
- select @regkey = 'SYSTEM\CurrentControlSet\Services\'
- -- default installation
- if @instance is null
- SELECT @regkey = @regkey + 'SQLServerAgent'
- else
- SELECT @regkey = @regkey + 'SQLAgent$' + @instance
-
- SELECT @proc = 'master..xp_regread'
- EXECUTE @retcode = @proc 'HKEY_LOCAL_MACHINE',
- @regkey,
- 'ObjectName',
- @param = @loc_account OUTPUT
-
- IF @@ERROR <> 0 OR @retcode <> 0
- SELECT @loc_account = NULL
- END
-
- /*
- ** Fetch the history cleanup agentname.
- */
- IF @loc_distribdb IS NOT NULL
- SELECT @loc_historycleanupagent = formatmessage (20567, @loc_distribdb)
-
- /*
- ** Fetch the distribution cleanup agent name.
- */
- IF @loc_distribdb IS NOT NULL
- SELECT @loc_distribcleanupagent = formatmessage (20568, @loc_distribdb)
-
-
- DONE:
- /*
- ** Return result set if no output parameters
- */
-
- IF @distributor = '%' AND @distribdb = '%' AND @directory = '%'
- AND @account = '%' AND @min_distretention = -1 AND @max_distretention = -1
- AND @history_retention = -1 AND @history_cleanupagent = '%'
- AND @distrib_cleanupagent = '%' AND @rpcsrvname = '%'
- SELECT 'distributor' = @loc_distributor,
- 'distribution database' = @loc_distribdb,
- 'directory' = @loc_directory,
- 'account' = @loc_account,
- 'min distrib retention' = @loc_mindistretention,
- 'max distrib retention' = @loc_maxdistretention,
- 'history retention' = @loc_historyretention,
- 'history cleanup agent' = @loc_historycleanupagent,
- 'distribution cleanup agent' = @loc_distribcleanupagent,
- 'rpc server name' = @loc_rpcsrvname,
- 'rpc login name' = @rpcsrvlogin
-
- /*
- ** Return output parameters if requested.
- */
-
- IF @distributor IS NULL
- SELECT @distributor = @loc_distributor
- IF @distribdb IS NULL
- SELECT @distribdb = @loc_distribdb
- IF @directory IS NULL
- SELECT @directory = @loc_directory
- IF @account IS NULL
- SELECT @account = @loc_account
- IF @min_distretention IS NULL
- SELECT @min_distretention = @loc_mindistretention
- IF @max_distretention IS NULL
- SELECT @max_distretention = @loc_maxdistretention
- IF @history_retention IS NULL
- SELECT @history_retention = @loc_historyretention
- IF @history_cleanupagent IS NULL
- SELECT @history_cleanupagent = @loc_historycleanupagent
- IF @distrib_cleanupagent IS NULL
- SELECT @distrib_cleanupagent = @loc_distribcleanupagent
-
- IF @rpcsrvname IS NULL
- begin
- -- Use local RPC if possible to avoid blocking problem.
- if is_srvrolemember('sysadmin') = 1 and UPPER(@loc_distributor) = UPPER(@@servername)
- select @rpcsrvname = @@servername
- else
- select @rpcsrvname = @loc_rpcsrvname
- end
-
- RETURN (0)
- GO
-
- dump tran master with no_log
- go
-
- raiserror('Creating procedure sp_enumdsn', 0,1)
- GO
-
- CREATE PROCEDURE sp_enumdsn
- AS
-
- SET NOCOUNT ON
-
- DECLARE @distributor sysname
- DECLARE @distproc nvarchar (300)
- DECLARE @retcode int
-
- DECLARE @dsotype_odbc int
- DECLARE @dsotype_oledb int
-
- select @dsotype_odbc = 1
- select @dsotype_oledb = 3
-
- /*
- ** Get distribution server information for remote RPC
- ** subscription calls.
- */
-
- EXEC @retcode = dbo.sp_helpdistributor @rpcsrvname = @distributor OUTPUT
- IF @@error <> 0 OR @retcode <> 0 or @distributor is null
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
-
- create table #datasourcestemptable (DataSourceName sysname collate database_default not null, Description nvarchar(255) collate database_default null, DataSourceType int null, ProviderName nvarchar(255) collate database_default null)
-
- /*
- ** Call xp_enumdsn
- */
- SELECT @distproc = RTRIM(@distributor) + '.master..xp_enumdsn'
- insert into #datasourcestemptable(DataSourceName, Description) EXEC @retcode = @distproc
- IF @@error <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
-
- update #datasourcestemptable set DataSourceType = @dsotype_odbc where DataSourceType is null
- IF @@error <> 0
- BEGIN
- RETURN (1)
- END
-
- /*
- ** Call sp_enumoledbdatasources
- */
- SELECT @distproc = RTRIM(@distributor) + '.master.dbo.sp_enumoledbdatasources'
- insert into #datasourcestemptable(DataSourceName, Description, ProviderName) EXEC @retcode = @distproc
- IF @@error <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
-
- update #datasourcestemptable set DataSourceType = @dsotype_oledb where DataSourceType is null
- IF @@error <> 0
- BEGIN
- RETURN (1)
- END
-
- select 'Data Source Name' = DataSourceName, Description, 'Type' = DataSourceType, 'Provider Name' = ProviderName
- from #datasourcestemptable
- order by 3, 1
-
- drop table #datasourcestemptable
-
- return (0)
- go
-
- raiserror('Creating procedure sp_enumoledbdatasources', 0,1)
- GO
-
- CREATE PROCEDURE sp_enumoledbdatasources
- AS
- set nocount on
-
- select srvname, srvproduct, providername from master..sysservers where
- (srvstatus & 0x0080) <> 0
-
- return (0)
- go
-
- raiserror('Creating procedure sp_helpsubscriberinfo', 0,1)
- GO
-
- CREATE PROCEDURE sp_helpsubscriberinfo
- @subscriber sysname = '%'
- AS
-
- SET NOCOUNT ON
-
- DECLARE @distributor sysname
- DECLARE @distribdb sysname
- DECLARE @distproc nvarchar (300)
- DECLARE @retcode int
- DECLARE @subscriber_bit smallint
- DECLARE @show_password bit
-
- /*
- ** Security Check
- */
-
- /*
- ** Initializations.
- */
- SELECT @subscriber_bit = 4
-
-
- /*
- ** Check if subscriber is valid
- */
-
- IF @subscriber IS NULL
- BEGIN
- RAISERROR (14043, 16, -1, '@subscriber')
- RETURN (1)
- END
-
-
- IF @subscriber <> '%'
- BEGIN
-
- EXECUTE @retcode = dbo.sp_validname @subscriber
- IF @retcode <> 0
- RETURN (1)
-
- IF NOT EXISTS (SELECT *
- FROM master..sysservers
- WHERE UPPER(srvname) = UPPER(@subscriber) collate database_default
- AND (srvstatus & @subscriber_bit) <> 0)
- BEGIN
- RAISERROR (14010, 16, -1)
- RETURN (1)
- END
- END
-
-
- /*
- ** Get distribution server information for remote RPC
- ** subscription calls.
- */
-
- EXEC @retcode = dbo.sp_helpdistributor @rpcsrvname = @distributor OUTPUT,
- @distribdb = @distribdb OUTPUT
-
- /* RAISEERROR is subscriber is not '%' */
- IF @@error <> 0 OR @retcode <> 0 OR @distribdb IS NULL OR @distributor IS NULL
- BEGIN
- IF @subscriber <> '%'
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
- ELSE
- RETURN 0
- END
-
- create table #subscriber_info
- (
- publisher sysname collate database_default not null,
- subscriber sysname collate database_default not null,
- type tinyint not null, /* 0: MS SQL Server 1: ODBC Data Source */
- login sysname collate database_default null,
- password nvarchar(524) NULL,
- commit_batch_size int not null, -- commit_batch_size, no longer supported
- status_batch_size int not null, -- status_batch_size, no longer supported
- flush_frequency int not null, -- flush_frequency, no longer supported
- frequency_type int not null,
- frequency_interval int not null,
- frequency_relative_interval int not null,
- frequency_recurrence_factor int not null,
- frequency_subday int not null,
- frequency_subday_interval int not null,
- active_start_time_of_day int not null,
- active_end_time_of_day int not null,
- active_start_date int not null,
- active_end_date int not null,
- retryattempt int not null, -- retryattempt, no longer exist
- retrydelay int not null, -- retrydelay, no longer exist
- description nvarchar(255) collate database_default null,
- security_mode int not null,
- frequency_type2 int not null,
- frequency_interval2 int not null,
- frequency_relative_interval2 int not null,
- frequency_recurrence_factor2 int not null,
- frequency_subday2 int not null,
- frequency_subday_interval2 int not null,
- active_start_time_of_day2 int not null,
- active_end_time_of_day2 int not null,
- active_start_date2 int not null,
- active_end_date2 int not null
- )
-
- IF @@error <> 0
- RETURN (1)
-
- /*
- ** Retrieve MSsubscriber_info
- */
- if is_srvrolemember('sysadmin') = 1
- select @show_password = 1
- else
- select @show_password = 0
-
- SELECT @distproc = RTRIM(@distributor) + '.' +
- RTRIM(@distribdb) + '.dbo.sp_MShelp_subscriber_info'
-
- insert into #subscriber_info EXEC @retcode = @distproc
- @publisher = @@SERVERNAME,
- @subscriber = @subscriber,
- @show_password = @show_password
-
- IF @@error <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
-
- IF @retcode <> 0
- BEGIN
- RAISERROR (14085, 16, -1)
- RETURN (1)
- END
-
- -- Filter out subscribers that are not defined locally but left at the distributor
- -- This will happen if the publisher is cleaned up when the distributor is offline.
- select info.* from #subscriber_info info, master..sysservers servers where
- UPPER(info.subscriber) = UPPER(servers.srvname) collate database_default and
- (servers.srvstatus & @subscriber_bit) <> 0
-
- go
-
- raiserror('Creating procedure sp_replica', 0,1)
- GO
-
- CREATE PROCEDURE sp_replica (
- @tabname nvarchar(92), /* The table being replicated */
- @replicated nvarchar(5) /* True or false */
- ) AS
-
- SET NOCOUNT ON
- RAISERROR (21023, 16, -1,'sp_replica')
- RETURN(1)
- go
-
-
- dump tran master with no_log
- go
-
- raiserror('Creating procedure sp_addpublisher', 0,1)
- GO
-
- CREATE PROCEDURE sp_addpublisher (
- @publisher sysname, /* publisher server name */
- @type nvarchar (5) = NULL /* NULL or 'dist' */
- ) AS
-
- SET NOCOUNT ON
- RAISERROR (21023, 16, -1,'sp_addpublisher')
- RETURN(1)
- go
-
- raiserror('Creating procedure sp_addsubscriber', 0,1)
- GO
-
- CREATE PROCEDURE sp_addsubscriber (
- @subscriber sysname,
- @type tinyint = 0,
- @login sysname = 'sa',
- @password sysname = NULL,
- @commit_batch_size int = 100,
- @status_batch_size int = 100,
- @flush_frequency int = 0,
- @frequency_type int = 64,
- @frequency_interval int = 1,
- @frequency_relative_interval int = 1,
- @frequency_recurrence_factor int = 0,
- @frequency_subday int = 4,
- @frequency_subday_interval int = 5,
- @active_start_time_of_day int = 0,
- @active_end_time_of_day int = 235959,
- @active_start_date int = 0,
- @active_end_date int = 99991231,
- @description nvarchar (255) = NULL,
- @security_mode int = 1, /* backward compatible */ /* 0 standard; 1 integrated */
- @encrypted_password bit = 0
- ) AS
-
- DECLARE @distributor sysname
- DECLARE @distribdb sysname
- DECLARE @distproc nvarchar (300)
- DECLARE @retcode int
- DECLARE @dsn_subscriber tinyint
- DECLARE @jet_subscriber tinyint
- DECLARE @oledb_subscriber tinyint
- DECLARE @dist_rpcname sysname
- DECLARE @platform_nt binary
-
- -- Defined in sqlrepl.h
- select @dsn_subscriber = 1 /* Const: subscriber type 'dsn' */
- select @jet_subscriber = 2
- select @oledb_subscriber = 3
-
- select @platform_nt = 0x1
-
- /*
- ** Check if replication components are installed on this server
- */
- exec @retcode = dbo.sp_MS_replication_installed
- if (@retcode <> 1)
- begin
- return (1)
- end
-
- /*
- ** Parameter Check: @subscriber.
- ** Check to make sure that the subscriber doesn't already exist, and
- ** that the name is a valid non-null identifier.
- */
-
- IF @subscriber IS NULL
- BEGIN
- RAISERROR (14043, 16, -1, '@subscriber')
- RETURN (1)
- END
-
- EXECUTE @retcode = dbo.sp_validname @subscriber
-
- IF @@ERROR <> 0 OR @retcode <> 0
- RETURN (1)
-
- if LOWER(@subscriber) = 'all'
- BEGIN
- RAISERROR (14032, 16, -1, '@subscriber')
- RETURN (1)
- END
-
- /*
- ** Check for invalid security mode
- */
- IF @security_mode < 0 OR @security_mode > 1
- BEGIN
- RAISERROR(14109, 16, -1)
- RETURN (1)
- END
-
- IF (UPPER(@subscriber) = UPPER(@@SERVERNAME) and @platform_nt != ( platform() & @platform_nt ) and @security_mode = 1)
- BEGIN
- RAISERROR(21038, 16, -1)
- RETURN (1)
- END
-
- IF EXISTS (SELECT *
- FROM master..sysservers
- WHERE UPPER(srvname) = UPPER(@subscriber) collate database_default
- AND srvstatus & 4 <> 0)
-
- BEGIN
- RAISERROR (14040, 16, -1, @subscriber)
- RETURN (1)
- END
-
- IF @password = N''
- select @password = NULL
-
-
- /*
- ** If no MSsubscriber_info parameters skip RPC code.
- */
-
- IF @frequency_type = -1
- GOTO ADDSUB
-
- /*
- ** Get distribution server information for remote RPC
- ** subscription calls.
- */
-
- /* BEGIN TRAN addsubscriber */
-
- EXEC @retcode = dbo.sp_helpdistributor @distributor = @distributor OUTPUT,
- @rpcsrvname = @dist_rpcname OUTPUT,
- @distribdb = @distribdb OUTPUT
-
- IF @@error <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- goto undo
- END
-
- IF @retcode <> 0 OR @distribdb IS NULL OR @distributor IS NULL
- BEGIN
- RAISERROR (14071, 16, -1)
- goto undo
- END
-
-
- DECLARE @zeroint int
- SELECT @zeroint = 0
- /*
- ** Insert information into MSsubscriber_info
- */
- SELECT @distproc = RTRIM(@dist_rpcname) + '.' + RTRIM(@distribdb) + '.dbo.sp_MSadd_subscriber_info'
- EXEC @retcode = @distproc
- @@SERVERNAME,
- @subscriber,
- @type,
- @login,
- @password,
- @commit_batch_size,
- @status_batch_size,
- @flush_frequency,
- @frequency_type,
- @frequency_interval,
- @frequency_relative_interval,
- @frequency_recurrence_factor,
- @frequency_subday,
- @frequency_subday_interval,
- @active_start_time_of_day,
- @active_end_time_of_day,
- @active_start_date,
- @active_end_date,
- /* Work around of server RPC named parameter problem */
- @retryattempts = @zeroint,
- @retrydelay = @zeroint,
- @description = @description,
- @security_mode = @security_mode,
- @encrypted_password = @encrypted_password
-
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14042, 16, -1)
- goto undo
- END
-
- /*
- ** add schedule information into MSsubscriber_schedule for merge agent
- */
- -- NOTE: We may need better default schedule for merge agent
-
- SELECT @distproc = RTRIM(@dist_rpcname) + '.' + RTRIM(@distribdb) + '.dbo.sp_MSadd_subscriber_schedule'
- EXEC @retcode = @distproc
- @@SERVERNAME,
- @subscriber,
- 0, -- agent_type = 0 means distribution agent
- @frequency_type,
- @frequency_interval,
- @frequency_relative_interval,
- @frequency_recurrence_factor,
- @frequency_subday,
- @frequency_subday_interval,
- @active_start_time_of_day,
- @active_end_time_of_day,
- @active_start_date,
- @active_end_date
-
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14042, 16, -1)
- goto undo
- END
-
- EXEC @retcode = @distproc
- @@SERVERNAME,
- @subscriber,
- 1, --agent_type = 0 means merge agent
- 4, --frequency_type,
- 1, --frequency_interval,
- 1, --frequency_relative_interval,
- 0, --frequency_recurrence_factor,
- 8, --frequency_subday,
- 1, --frequency_subday_interval,
- 0, --active_start_time_of_day,
- 235959, --active_end_time_of_day,
- 0, --active_start_date,
- 99991231 --active_end_date
-
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14042, 16, -1)
- goto undo
- END
-
- /* Commit Transaction addsubscriber */
-
- ADDSUB:
-
- /*
- ** The server may already be listed in master..sysservers, but might
- ** not be marked as a subscriber yet. If it's not in
- ** master..sysservers, let's add it first.
- */
-
- IF NOT EXISTS (SELECT *
- FROM master..sysservers
- WHERE LOWER(srvname) = LOWER(@subscriber) collate database_default)
- begin
-
- EXECUTE @retcode = dbo.sp_addserver @subscriber
-
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14042, 16, -1)
- RETURN (1)
- END
- end
- ELSE
- BEGIN
- SELECT @subscriber = fn_getpersistedservernamecasevariation(@subscriber) collate database_default
- END
-
- /*
- ** Set the server option to indicate this is a subscriber.
- */
-
- EXECUTE @retcode = dbo.sp_serveroption @subscriber, 'sub', true
-
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14042, 16, -1)
- RETURN (1)
- END
-
- /*
- ** Set the server option to indicate this is a DSN subscriber.
- */
- if @type = @dsn_subscriber OR @type = @jet_subscriber OR @type = @oledb_subscriber
- BEGIN
- update master..sysservers set srvproduct = 'MSREPL-NONSQL' where
- UPPER(srvname) = UPPER(@subscriber) collate database_default
- IF @@error <> 0
- return(1)
- END
-
- RETURN (0)
- undo:
-
- RETURN (1)
- GO
-
- raiserror('Creating procedure sp_addsubscriber_schedule', 0,1)
- GO
-
- CREATE PROCEDURE sp_addsubscriber_schedule (
- @subscriber sysname,
- @agent_type smallint = 0,
- @frequency_type int = 64,
- @frequency_interval int = 1,
- @frequency_relative_interval int = 1,
- @frequency_recurrence_factor int = 0,
- @frequency_subday int = 4,
- @frequency_subday_interval int = 5,
- @active_start_time_of_day int = 0,
- @active_end_time_of_day int = 235959,
- @active_start_date int = 0,
- @active_end_date int = 99991231
- ) AS
-
- DECLARE @distributor sysname
- DECLARE @distribdb sysname
- DECLARE @distproc nvarchar (300)
- DECLARE @retcode int
- DECLARE @msg nvarchar(255)
-
- /*
- ** Parameter Check: @subscriber.
- ** Check to make sure that the subscriber doesn't already exist, and
- ** that the name is a valid non-null identifier.
- */
-
- IF @subscriber IS NULL
- BEGIN
- RAISERROR (14043, 16, -1, '@subscriber')
- RETURN (1)
- END
-
- EXECUTE @retcode = dbo.sp_validname @subscriber
-
- IF @@ERROR <> 0 OR @retcode <> 0
- RETURN (1)
-
- if LOWER(@subscriber) = 'all'
- BEGIN
- RAISERROR (14032, 16, -1, '@subscriber')
- RETURN (1)
- END
-
- IF NOT EXISTS (SELECT * FROM master..sysservers WHERE UPPER(srvname) = UPPER(@subscriber) collate database_default)
- BEGIN
- RAISERROR (14048, 16, -1, @subscriber)
- RETURN (1)
- END
-
- EXEC @retcode = dbo.sp_helpdistributor @rpcsrvname = @distributor OUTPUT,
- @distribdb = @distribdb OUTPUT
-
- IF @@error <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
-
- IF @retcode <> 0 OR @distribdb IS NULL OR @distributor IS NULL
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
-
- SELECT @distproc = RTRIM(@distributor) + '.' + RTRIM(@distribdb) + '.dbo.sp_MSadd_subscriber_schedule'
- EXEC @retcode = @distproc
- @@SERVERNAME,
- @subscriber,
- @agent_type,
- @frequency_type,
- @frequency_interval,
- @frequency_relative_interval,
- @frequency_recurrence_factor,
- @frequency_subday,
- @frequency_subday_interval,
- @active_start_time_of_day,
- @active_end_time_of_day,
- @active_start_date,
- @active_end_date
-
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14042, 16, -1)
- RETURN (1)
- END
-
- RETURN (0)
- GO
-
- raiserror('Creating procedure sp_changesubscriber', 0,1)
- GO
-
- CREATE PROCEDURE sp_changesubscriber (
- @subscriber sysname,
- @type tinyint = NULL,
- @login sysname = NULL,
- @password sysname = '%',
- @commit_batch_size int = NULL,
- @status_batch_size int = NULL,
- @flush_frequency int = NULL,
- @frequency_type int = NULL,
- @frequency_interval int = NULL,
- @frequency_relative_interval int = NULL,
- @frequency_recurrence_factor int = NULL,
- @frequency_subday int = NULL,
- @frequency_subday_interval int = NULL,
- @active_start_time_of_day int = NULL,
- @active_end_time_of_day int = NULL,
- @active_start_date int = NULL,
- @active_end_date int = NULL,
- @description nvarchar (255) = NULL,
- @security_mode int = NULL /* 0 standard; 1 integrated */
-
- ) AS
-
- DECLARE @distributor sysname
- DECLARE @distribdb sysname
- DECLARE @distproc nvarchar (300)
- DECLARE @msg nvarchar(255)
- DECLARE @retcode int
- DECLARE @platform_nt binary
-
- select @platform_nt = 0x1
-
- IF (UPPER(@subscriber) = UPPER(@@SERVERNAME) and @platform_nt != ( platform() & @platform_nt ) and @security_mode = 1)
- BEGIN
- RAISERROR(21038, 16, -1)
- RETURN (1)
- END
-
- /*
- ** Check to make sure that the subscriber exists.
- */
- IF NOT EXISTS (SELECT *
- FROM master..sysservers
- WHERE UPPER(srvname) = UPPER(@subscriber) collate database_default)
- BEGIN
- RAISERROR(14048, 16, 1, @subscriber)
- RETURN (1)
- END
-
- /*
- ** Get distribution server information for remote RPC
- ** subscription calls.
- */
- EXEC @retcode = dbo.sp_helpdistributor @rpcsrvname = @distributor OUTPUT,
- @distribdb = @distribdb OUTPUT
- IF @@ERROR <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
-
- DECLARE @intnull int
- /*
- ** Update MSsubscriber_info
- */
- SELECT @distproc = RTRIM(@distributor) + '.' +
- RTRIM(@distribdb) + '.dbo.sp_MSupdate_subscriber_info'
- EXEC @retcode = @distproc
- @@SERVERNAME,
- @subscriber,
- @type,
- @login,
- @password,
- @commit_batch_size,
- @status_batch_size,
- @flush_frequency,
- @frequency_type,
- @frequency_interval,
- @frequency_relative_interval,
- @frequency_recurrence_factor,
- @frequency_subday,
- @frequency_subday_interval,
- @active_start_time_of_day,
- @active_end_time_of_day,
- @active_start_date,
- @active_end_date,
- @retryattempts = @intnull,
- @retrydelay = @intnull,
- @description = @description,
- @security_mode = @security_mode
- IF @@ERROR <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14048, 16, -1, @subscriber)
- RETURN (1)
- END
- go
-
- raiserror('Creating procedure sp_changesubscriber_schedule', 0,1)
- GO
-
- CREATE PROCEDURE sp_changesubscriber_schedule (
- @subscriber sysname,
- @agent_type smallint,
- @frequency_type int = NULL,
- @frequency_interval int = NULL,
- @frequency_relative_interval int = NULL,
- @frequency_recurrence_factor int = NULL,
- @frequency_subday int = NULL,
- @frequency_subday_interval int = NULL,
- @active_start_time_of_day int = NULL,
- @active_end_time_of_day int = NULL,
- @active_start_date int = NULL,
- @active_end_date int = NULL
- ) AS
-
- DECLARE @distributor sysname
- DECLARE @distribdb sysname
- DECLARE @distproc nvarchar (300)
- DECLARE @msg nvarchar(255)
- DECLARE @retcode int
-
- /*
- ** Check to make sure that the subscriber DOES exist.
- */
- IF NOT EXISTS (SELECT *
- FROM master..sysservers
- WHERE UPPER(srvname) = UPPER(@subscriber) collate database_default)
- BEGIN
- RAISERROR (14048, 16, -1, @subscriber)
- RETURN (1)
- END
-
- /*
- ** Get distribution server information for remote RPC
- ** subscription calls.
- */
- EXEC @retcode = dbo.sp_helpdistributor @rpcsrvname = @distributor OUTPUT,
- @distribdb = @distribdb OUTPUT
- IF @@ERROR <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
-
- /*
- ** Update MSsubscriber_info
- */
- SELECT @distproc = RTRIM(@distributor) + '.' +
- RTRIM(@distribdb) + '.dbo.sp_MSupdate_subscriber_schedule'
- EXEC @retcode = @distproc
- @@SERVERNAME,
- @subscriber,
- @agent_type,
- @frequency_type,
- @frequency_interval,
- @frequency_relative_interval,
- @frequency_recurrence_factor,
- @frequency_subday,
- @frequency_subday_interval,
- @active_start_time_of_day,
- @active_end_time_of_day,
- @active_start_date,
- @active_end_date
-
- IF @@ERROR <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14048, 16, -1, @subscriber)
- RETURN (1)
- END
-
- RETURN (0)
- go
-
- raiserror('Creating procedure sp_distcounters', 0,1)
- GO
-
- CREATE PROCEDURE sp_distcounters
- AS
-
- SET NOCOUNT ON
-
- /*
- ** Declarations.
- */
- DECLARE @distributor sysname
- DECLARE @distribdb sysname
- DECLARE @distproc nvarchar (300)
- DECLARE @retcode int
-
- /*
- ** Get distribution server information for remote RPC
- ** subscription calls. If no distribution information, assume
- ** replication is not being used.
- */
- EXEC @retcode = dbo.sp_helpdistributor @rpcsrvname = @distributor OUTPUT,
- @distribdb = @distribdb OUTPUT
- IF @@error <> 0 OR @retcode <> 0 OR @distributor IS NULL OR
- @distribdb IS NULL
- RETURN (1)
-
- /*
- ** Request counters from Distribution Server
- */
- SELECT @distproc = RTRIM(@distributor) + '.' + RTRIM(@distribdb) +
- '.dbo.sp_MSdistribution_counters'
- EXEC @retcode = @distproc @@SERVERNAME
- go
-
-
- raiserror('Creating procedure sp_droppublisher', 0,1)
- GO
-
- CREATE PROCEDURE sp_droppublisher (
- @publisher sysname, /* publisher server name */
- @type nvarchar (5) = NULL /* NULL or 'dist' */
- ) AS
-
- SET NOCOUNT ON
- RAISERROR (21023, 16, -1,'sp_droppublisher')
- RETURN(1)
-
- go
-
- raiserror('Creating procedure sp_dropsubscriber', 0,1)
- GO
-
- CREATE PROCEDURE sp_dropsubscriber (
- @subscriber sysname, /* The name of the subscriber */
- @reserved nvarchar(50) = NULL,
- @ignore_distributor bit = 0
- ) AS
-
- SET NOCOUNT ON
-
- /*
- ** Declarations.
- */
-
- DECLARE @db_name sysname
- DECLARE @foundSubscription int
- DECLARE @command nvarchar(255)
- DECLARE @transpublishdb_bit int
- DECLARE @mergepublishdb_bit int
- DECLARE @distributor sysname
- DECLARE @distribdb sysname
- DECLARE @distproc nvarchar (300)
- DECLARE @retcode int
- DECLARE @type nvarchar(10)
-
- SELECT @transpublishdb_bit = 1
- SELECT @mergepublishdb_bit = 4
-
-
- /*
- ** Parameter Check: @subscriber.
- ** Check to make sure that the subscriber exists.
- */
-
- IF @subscriber IS NULL
- BEGIN
- RAISERROR (14043, 16, -1, '@subscriber')
- RETURN (1)
- END
-
- EXECUTE @retcode = dbo.sp_validname @subscriber
-
- IF @retcode <> 0
- RETURN (1)
-
- IF lower(@subscriber) <> 'all' and NOT EXISTS (SELECT *
- FROM master..sysservers
- WHERE UPPER(srvname) = UPPER(@subscriber) collate database_default
- AND srvstatus & 4 <> 0)
-
- BEGIN
- RAISERROR (14048, 16, -1, @subscriber)
- RETURN (1)
- END
-
- if lower(@subscriber) = 'all'
- begin
- DECLARE hCdropsubscriber_all CURSOR LOCAL FAST_FORWARD FOR
- SELECT srvname
- FROM master..sysservers
- WHERE srvstatus & 4 <> 0
- FOR READ ONLY
- OPEN hCdropsubscriber_all
- FETCH hCdropsubscriber_all INTO @subscriber
-
- WHILE (@@fetch_status <> -1)
- BEGIN
- EXECUTE @retcode = dbo.sp_dropsubscriber
- @subscriber = @subscriber,
- @ignore_distributor = @ignore_distributor,
- @reserved = @reserved
- IF @@ERROR <> 0 OR @retcode <> 0
- BEGIN
- CLOSE hCdropsubscriber_all
- DEALLOCATE hCdropsubscriber_all
- RETURN (1)
- END
- FETCH hCdropsubscriber_all INTO @subscriber
- end
-
- CLOSE hCdropsubscriber_all
- DEALLOCATE hCdropsubscriber_all
-
- return(0)
- end
-
-
- /*
- ** There should be no subscription by the subscriber
- ** Open a cursor the published databases.
- **
- */
- DECLARE hCdropsubscriber CURSOR LOCAL FAST_FORWARD FOR
- SELECT name, N'tran' FROM master..sysdatabases
- WHERE (category & @transpublishdb_bit) <> 0
- UNION
- select name, N'merge' from master..sysdatabases
- WHERE (category & @mergepublishdb_bit) <> 0
- FOR READ ONLY
-
- OPEN hCdropsubscriber
- FETCH hCdropsubscriber INTO @db_name, @type
-
- WHILE (@@fetch_status <> -1)
- BEGIN
- IF LOWER(@reserved collate SQL_Latin1_General_CP1_CS_AS) = 'drop_subscriptions'
- BEGIN
- if @type = 'tran'
- begin
- SELECT @command = quotename(@db_name) + '.dbo.sp_dropsubscription'
- EXECUTE @retcode = @command
- @publication = 'all',
- @article = 'all',
- @subscriber = @subscriber,
- @ignore_distributor = @ignore_distributor
- end
- if @type = 'merge'
- begin
- SELECT @command = quotename(@db_name) + '.dbo.sp_dropmergesubscription'
- EXECUTE @retcode = @command
- @publication = 'all',
- @subscriber = @subscriber,
- @subscription_type = 'both',
- @ignore_distributor = @ignore_distributor
- end
- IF @@ERROR <> 0 OR @retcode <> 0
- BEGIN
- CLOSE hCdropsubscriber
- DEALLOCATE hCdropsubscriber
- RETURN (1)
- END
- END
-
- -- Set @foundSubscription to not null so that sp_helpsubscription will not display
- -- result set
- select @foundSubscription = 0
-
- if @type = 'tran'
- begin
- SELECT @command = quotename(@db_name) + '.dbo.sp_helpsubscription'
- EXECUTE @retcode = @command @publication = '%', @article = '%',
- @subscriber = @subscriber,
- @found = @foundSubscription OUTPUT
-
- IF @@ERROR <> 0 OR @retcode <> 0
- BEGIN
- CLOSE hCdropsubscriber
- DEALLOCATE hCdropsubscriber
- RETURN (1)
- END
- end
- else
- begin
- SELECT @command = quotename(@db_name) + '.dbo.sp_helpmergesubscription'
- EXECUTE @retcode = @command @publication = '%',
- @subscriber = @subscriber,
- @subscription_type = 'both',
- @found = @foundSubscription OUTPUT
-
- IF @@ERROR <> 0 OR @retcode <> 0
- BEGIN
- CLOSE hCdropsubscriber
- DEALLOCATE hCdropsubscriber
- RETURN (1)
- END
- end
-
-
- IF @foundSubscription <> 0
- BEGIN
- CLOSE hCdropsubscriber
- DEALLOCATE hCdropsubscriber
- RAISERROR ( 14144, 16, -1, @subscriber, @db_name)
- RETURN (1)
- END
-
- FETCH hCdropsubscriber INTO @db_name, @type
-
- END
-
- CLOSE hCdropsubscriber
- DEALLOCATE hCdropsubscriber
-
- /*
- ** Drop the subsubscriber_info in the distribution database
- */
- /*
- ** if @ignore_distributor = 1, we are in bruteforce cleanup mode, don't do RPC.
- */
- if @ignore_distributor = 0
- begin
-
-
- /*
- ** Get distribution server information for remote RPC
- ** agent verification.
- */
- EXEC @retcode = dbo.sp_helpdistributor
- @rpcsrvname = @distributor OUTPUT,
- @distribdb = @distribdb OUTPUT
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
-
- /*
- ** Insert information into MSsubscriber_info in the distribution db
- */
- if @distribdb is not null
- begin
- SELECT @distproc = RTRIM(@distributor) + '.' + RTRIM(@distribdb) + '.dbo.sp_MSdrop_subscriber_info'
- EXEC @retcode = @distproc
- @publisher = @@SERVERNAME,
- @subscriber = @subscriber
-
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14042, 16, -1)
- RETURN (1)
- END
- end
- end
-
- -- We have already validated the existence of the server at this point
- SELECT @subscriber = fn_getpersistedservernamecasevariation(@subscriber) collate database_default
-
- /*
- ** Turn off the subscriber server option.
- */
- EXECUTE @retcode = dbo.sp_serveroption @subscriber, 'sub', false
- IF @@ERROR <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14047, 16, -1, @subscriber)
- RETURN (1)
- END
-
- RAISERROR (14062, 10, -1)
- go
-
- raiserror('Creating procedure sp_dsninfo', 0,1)
- GO
-
- CREATE PROCEDURE sp_dsninfo
- -- xp_dsninfo does not support unicode
- @dsn varchar(128),
- @infotype varchar(128) = NULL,
- @login varchar(128) = NULL,
- @password varchar(128) = NULL,
- @dso_type int = 1 /* 1 is ODBC, 3 OLEDB. */
- AS
-
- SET NOCOUNT ON
-
- DECLARE @distributor sysname
- DECLARE @distproc nvarchar (300)
- DECLARE @retcode int
- DECLARE @dsotype_odbc int
- DECLARE @dsotype_oledb int
-
- select @dsotype_odbc = 1
- select @dsotype_oledb = 3
-
- /*
- ** Get distribution server information for remote RPC
- ** subscription calls.
- */
-
- EXEC @retcode = dbo.sp_helpdistributor @rpcsrvname = @distributor OUTPUT
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
-
- if (@dso_type = @dsotype_odbc)
- begin
- /*
- ** Call xp_dsninfo
- */
- SELECT @distproc = RTRIM(@distributor) + '.master..xp_dsninfo'
- EXEC @retcode = @distproc @dsn, @infotype, @login, @password
- IF @@error <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
- end
- else if (@dso_type = @dsotype_oledb)
- begin
- /*
- ** Call sp_oledbinfo
- */
- EXEC @retcode = master.dbo.sp_oledbinfo @dsn, @infotype, @login, @password
- IF @@error <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
- end
-
- go
-
- dump tran master with no_log
- go
-
- raiserror('Creating procedure sp_publishdb', 0,1)
- GO
-
- /* For backward compatible */
- CREATE PROCEDURE sp_publishdb @dbname sysname,@value nvarchar (5)
- AS
-
- DECLARE @retcode int
-
- EXECUTE @retcode = dbo.sp_replicationdboption @dbname, 'publish', @value
-
- IF @@ERROR <> 0 or @retcode <> 0
- BEGIN
- RETURN (1)
- END
-
- RETURN(0)
- go
-
-
- raiserror('Creating procedure sp_MScreate_dist_tables', 0,1)
- GO
-
- CREATE PROCEDURE sp_MScreate_dist_tables
- AS
-
- /*
- ** Important:
- ** We use varbinary(16) for xact_id and xact_seqno, we don't want ending nulls
- ** to be truncated by the server
- **
- ** Also, in MSrepl_commands, we don't want ending space to be truncated.
- */
- SET ANSI_PADDING ON
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSrepl_version' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSrepl_version', 0,1)
- /****************************************************************************/
- CREATE TABLE dbo.MSrepl_version
- (
- major_version int NOT NULL,
- minor_version int NOT NULL,
- revision int NOT NULL,
- db_existed bit NULL
- )
- CREATE UNIQUE CLUSTERED INDEX ucMSrepl_version ON dbo.MSrepl_version
- (major_version, minor_version, revision)
-
- EXEC dbo.sp_MS_marksystemobject 'MSrepl_version'
-
- INSERT INTO MSrepl_version VALUES (7,0,0,0)
- END
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSpublisher_databases' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSpublisher_databases', 0,1)
- /****************************************************************************/
- CREATE TABLE dbo.MSpublisher_databases(
- publisher_id smallint NOT NULL,
- publisher_db sysname NULL,
- id int identity NOT NULL,
- )
- EXEC dbo.sp_MS_marksystemobject 'MSpublisher_databases'
-
- raiserror('Creating clustered index ucMSpublisher_databases', 0,1)
- CREATE UNIQUE CLUSTERED INDEX ucMSpublisher_databases ON dbo.MSpublisher_databases
- (publisher_id, publisher_db, id)
- END
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSpublications' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSpublications', 0,1)
- /****************************************************************************/
- CREATE TABLE dbo.MSpublications (
- publisher_id smallint NOT NULL,
- publisher_db sysname NULL,
- publication sysname NOT NULL,
- publication_id int identity NOT NULL, -- This id IS NOT the same as the SQL Server publisher's
- publication_type int NOT NULL, -- 0 = Snapshot 1 = Transactional
- thirdparty_flag bit NOT NULL, -- 0 = SQL Server 1 = Third Party
- independent_agent bit NOT NULL,
- immediate_sync bit NOT NULL,
- allow_push bit NOT NULL,
- allow_pull bit NOT NULL,
- allow_anonymous bit NOT NULL,
- description nvarchar(255) NULL,
- vendor_name nvarchar(100) NULL,
- retention int NULL,
- sync_method int default 0 NOT NULL,
- allow_subscription_copy bit default 0 not null,
- thirdparty_options int null,
- allow_queued_tran bit default 0 not null
- )
- EXEC dbo.sp_MS_marksystemobject 'MSpublications'
-
- -- publication_id needs to be the first columns in the index. It
- -- is used in sp_MSmaximum_cleanup_seqno.
- raiserror('Creating clustered index ucMSpublications', 0,1)
- CREATE UNIQUE CLUSTERED INDEX ucMSpublications ON dbo.MSpublications
- (publication_id, publication, publisher_db, publisher_id)
-
- END
- ELSE
- BEGIN
- IF NOT EXISTS (select * from syscolumns
- where name = 'sync_method'
- and id=object_id('MSpublications'))
- BEGIN
- ALTER TABLE MSpublications ADD sync_method int default 0 not null
- END
-
- IF NOT EXISTS (select * from syscolumns
- where name = 'allow_subscription_copy'
- and id=object_id('MSpublications'))
- BEGIN
- ALTER TABLE MSpublications ADD allow_subscription_copy bit default 0 not null
- END
- IF NOT EXISTS (select * from syscolumns
- where name = 'thirdparty_options'
- and id=object_id('MSpublications'))
- BEGIN
- ALTER TABLE MSpublications ADD thirdparty_options int null
- END
-
- IF NOT EXISTS (select * from syscolumns
- where name = 'allow_queued_tran'
- and id=object_id('MSpublications'))
- BEGIN
- ALTER TABLE MSpublications ADD allow_queued_tran bit default 0 not null
- END
- END
-
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSarticles' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSarticles', 0,1)
- /****************************************************************************/
- CREATE TABLE dbo.MSarticles (
- publisher_id smallint NOT NULL,
- publisher_db sysname NULL,
- publication_id int NOT NULL,
- article sysname NOT NULL,
- article_id int NOT NULL, -- This id is the same as a SQL Server Publisher's
- destination_object sysname NULL,
- source_owner sysname NULL,
- source_object sysname NULL,
- description nvarchar(255) NULL
- )
-
- EXEC dbo.sp_MS_marksystemobject 'MSarticles'
-
- raiserror('Creating clustered index ucMSarticles', 0,1)
- CREATE UNIQUE CLUSTERED INDEX ucMSarticles ON dbo.MSarticles
- (publisher_db, publisher_id, article_id, article, publication_id)
- END
-
- IF NOT EXISTS( SELECT * FROM sysobjects WHERE name = 'MSsync_states' )
- BEGIN
- CREATE TABLE dbo.MSsync_states
- (
- publisher_id smallint not null,
- publisher_db sysname not null,
- publication_id int not null
- )
- EXEC dbo.sp_MS_marksystemobject 'MSsync_states'
-
- CREATE UNIQUE CLUSTERED INDEX ucMSsyncstates on dbo.MSsync_states
- ( publisher_id, publisher_db, publication_id )
- END
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSsubscriptions' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSsubscriptions', 0,1)
- /****************************************************************************/
- CREATE TABLE dbo.MSsubscriptions
- (
- publisher_database_id int NOT NULL, -- Used to reference MSrepl_transactions and MSrepl_commands
- publisher_id smallint NOT NULL,
- publisher_db sysname NOT NULL,
- publication_id int NOT NULL,
- article_id int NOT NULL,
- subscriber_id smallint NOT NULL,
- subscriber_db sysname NOT NULL,
- subscription_type int NOT NULL, -- 0 = push, 1 = pull, 2 = anonymous
- sync_type tinyint NOT NULL, -- 1 = automatic 2 = no sync
- status tinyint NOT NULL, -- 0 = inactive, 1 = subscribed, 2 = active
- subscription_seqno varbinary(16) NOT NULL, -- publisher's database sequence number
- snapshot_seqno_flag bit NOT NULL, -- 1 if subscription_seqno is the snapshot seqno
- independent_agent bit NOT NULL, -- Value carried over from MSpublications
- subscription_time datetime NOT NULL,
- loopback_detection bit NOT NULL,
- agent_id int NOT NULL,
- update_mode tinyint NOT NULL, -- 0 = read only, 1 = sync tran, 2 = queued tran,
- -- 3 = failover, 4 = sqlqueued tran, 5 = sqlqueued failover
- publisher_seqno varbinary(16) NOT NULL,
- ss_cplt_seqno varbinary(16) NOT NULL
- )
-
- EXEC dbo.sp_MS_marksystemobject 'MSsubscriptions'
-
- raiserror('Creating clustered index ucMSsubscirptions', 0,1)
- CREATE UNIQUE CLUSTERED INDEX ucMSsubscriptions ON dbo.MSsubscriptions
- (agent_id, article_id)
-
- -- Index used by sp_MSdelete_publisherdb_trans
- raiserror('Creating index iMSsubscriptions', 0,1)
- CREATE INDEX iMSsubscriptions ON dbo.MSsubscriptions
- (publisher_database_id, article_id, subscriber_id, subscriber_db, publication_id, publisher_db, publisher_id)
- END
- ELSE
- BEGIN
- if not exists ( select * from syscolumns
- where id = object_id( N'MSsubscriptions' )
- and name = N'ss_cplt_seqno' )
- begin
- exec ('alter table MSsubscriptions add ss_cplt_seqno varbinary(16) NULL')
- exec ('update MSsubscriptions set ss_cplt_seqno = publisher_seqno')
- exec ('alter table MSsubscriptions alter column ss_cplt_seqno varbinary(16) NOT NULL')
- end
- END
-
- -- For beta 3 upgrade, we need to create new index here.
- if not exists (select * from sysindexes where name = 'iMSsubscriptions2')
- begin
- -- Index used by sp_MSdelete_publisherdb_trans
- raiserror('Creating index iMSsubscriptions2', 0,1)
- CREATE INDEX iMSsubscriptions2 ON dbo.MSsubscriptions
- (publisher_database_id, subscription_seqno)
- end
-
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSmerge_subscriptions' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSmerge_subscriptions', 0,1)
- /****************************************************************************/
- CREATE TABLE dbo.MSmerge_subscriptions
- (
- publisher_id smallint NOT NULL,
- publisher_db sysname NULL,
- publication_id int NOT NULL,
- subscriber_id smallint NOT NULL,
- subscriber_db sysname NULL,
- subscription_type int NULL, -- 0 = push, 1 = pull, 2 = anonymous
- sync_type tinyint NOT NULL, -- 1 = automatic 2 = no sync
- status tinyint NOT NULL, -- 0 = inactive, 1 = subscribed, 2 = active
- subscription_time datetime NOT NULL
- )
-
- EXEC dbo.sp_MS_marksystemobject 'MSmerge_subscriptions'
-
- raiserror('Creating clustered index ucMSmerge_subscriptions', 0,1)
- CREATE UNIQUE CLUSTERED INDEX ucMSmerge_subscriptions ON dbo.MSmerge_subscriptions
- (publisher_id, publisher_db, publication_id, subscriber_id, subscriber_db)
- END
-
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSrepl_transactions' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSrepl_transactions', 0,1)
- /****************************************************************************/
- CREATE TABLE dbo.MSrepl_transactions
- (
- publisher_database_id int NOT NULL,
- xact_id varbinary(16) NULL,
- xact_seqno varbinary (16 ) NOT NULL,
- entry_time datetime NOT NULL
- )
-
- EXEC dbo.sp_MS_marksystemobject 'MSrepl_transactions'
-
- raiserror('Creating clustered index usMSrepl_transactions', 0,1)
- CREATE UNIQUE CLUSTERED INDEX ucMSrepl_transactions ON dbo.MSrepl_transactions
- (publisher_database_id, xact_seqno)
- WITH STATISTICS_NORECOMPUTE
-
- CREATE STATISTICS stat_publisher_database_id
- ON MSrepl_transactions (publisher_database_id)
- WITH NORECOMPUTE
-
- CREATE STATISTICS stat_xact_id
- ON MSrepl_transactions (xact_id)
- WITH NORECOMPUTE
-
- CREATE STATISTICS stat_xact_seqno
- ON MSrepl_transactions (xact_seqno)
- WITH NORECOMPUTE
-
- CREATE STATISTICS stat_entry_time
- ON MSrepl_transactions (entry_time)
- WITH NORECOMPUTE
-
- END
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSrepl_commands' and type = 'U')
- BEGIN
-
- /****************************************************************************/
- raiserror('Creating table MSrepl_commands', 0,1)
- /****************************************************************************/
-
-
- CREATE TABLE dbo.MSrepl_commands (
- publisher_database_id int not null,
- xact_seqno varbinary(16) not null,
- type int not null,
- article_id int not null,
- originator_id int not null,
- command_id int not null,
- partial_command bit not null,
- command varbinary(1024) NULL
- )
-
-
- EXEC dbo.sp_MS_marksystemobject 'MSrepl_commands'
-
- raiserror('Creating clusterd index ucMSrepl_commands', 0,1)
- CREATE UNIQUE CLUSTERED INDEX ucMSrepl_commands ON dbo.MSrepl_commands
- (publisher_database_id, xact_seqno, command_id)
- WITH STATISTICS_NORECOMPUTE
-
- CREATE STATISTICS stat_xact_seqno
- ON MSrepl_commands (xact_seqno)
- WITH NORECOMPUTE
-
- CREATE STATISTICS stat_type
- ON MSrepl_commands (type)
- WITH NORECOMPUTE
-
- CREATE STATISTICS stat_article_id
- ON MSrepl_commands (article_id)
- WITH NORECOMPUTE
-
- CREATE STATISTICS stat_originator_id
- ON MSrepl_commands (originator_id)
- WITH NORECOMPUTE
-
- CREATE STATISTICS stat_command_id
- ON MSrepl_commands (command_id)
- WITH NORECOMPUTE
-
- CREATE STATISTICS stat_partial_command
- ON MSrepl_commands (partial_command)
- WITH NORECOMPUTE
-
- END
-
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSrepl_originators' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSrepl_orginators', 0,1)
- /****************************************************************************/
- CREATE TABLE dbo.MSrepl_originators
- (
- id int identity not null,
- publisher_database_id int not null,
- srvname sysname not null,
- dbname sysname not null
- )
-
- EXEC dbo.sp_MS_marksystemobject 'MSrepl_originators'
-
- raiserror('Creating clustered index usMSrepl_originators', 0,1)
- CREATE UNIQUE CLUSTERED INDEX ucMSrepl_originators ON dbo.MSrepl_originators
- (publisher_database_id, srvname, dbname)
- END
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSsubscriber_info' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSsubscriber_info', 0,1)
- /****************************************************************************/
- CREATE TABLE dbo.MSsubscriber_info
- (
- publisher sysname NOT NULL,
- subscriber sysname NOT NULL,
- type tinyint NOT NULL, /* 0: MS SQL Server 1: ODBC Data Source */
- login sysname NULL,
- password nvarchar(524) NULL,
- description nvarchar(255) NULL,
- security_mode int NOT NULL
- )
-
- EXEC dbo.sp_MS_marksystemobject 'MSsubscriber_info'
-
- raiserror('Creating clustered index ucMSsubscriber_info', 0,1)
- CREATE UNIQUE CLUSTERED INDEX ucMSsubscriber_info ON dbo.MSsubscriber_info
- (publisher, subscriber)
- END
- ELSE
- BEGIN
- IF NOT EXISTS (select * from syscolumns
- where name = 'description'
- and id=object_id('MSsubscriber_info'))
- BEGIN
-
- ALTER TABLE MSsubscriber_info ADD description nvarchar (255) NULL
- UPDATE MSsubscriber_info SET description = 'SQL Server 6.0'
- END
- END
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSsubscriber_schedule' and type = 'U')
- BEGIN
- raiserror('Creating table MSsubscriber_schedule', 0,1)
-
- CREATE TABLE dbo.MSsubscriber_schedule
- (
- publisher sysname NOT NULL,
- subscriber sysname NOT NULL,
- agent_type smallint NOT NULL, -- 0 for distribution agent, 1 for merge agent
- frequency_type int NOT NULL,
- frequency_interval int NOT NULL,
- frequency_relative_interval int NOT NULL,
- frequency_recurrence_factor int NOT NULL,
- frequency_subday int NOT NULL,
- frequency_subday_interval int NOT NULL,
- active_start_time_of_day int NOT NULL,
- active_end_time_of_day int NOT NULL,
- active_start_date int NOT NULL,
- active_end_date int NOT NULL
- )
- EXEC dbo.sp_MS_marksystemobject 'MSsubscriber_schedule'
-
- CREATE UNIQUE CLUSTERED INDEX ucMSsubscriber_schedule ON dbo.MSsubscriber_schedule
- (publisher, subscriber, agent_type)
-
- END
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSsnapshot_history' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSsnapshot_history', 0,1)
- /****************************************************************************/
- CREATE TABLE dbo.MSsnapshot_history
- (
- agent_id int NOT NULL,
- runstatus int NOT NULL,
- start_time datetime NOT NULL,
- time datetime NOT NULL,
- duration int NOT NULL,
- comments nvarchar(255) NOT NULL,
-
- -- Session summary statistics
- delivered_transactions int NOT NULL,
- delivered_commands int NOT NULL,
- delivery_rate float NOT NULL,
-
- error_id int NOT NULL,
- timestamp NOT NULL
- )
-
- EXEC dbo.sp_MS_marksystemobject 'MSsnapshot_history'
-
- raiserror('Creating clustered index ucMSsnapshot_history', 0,1)
- CREATE UNIQUE CLUSTERED INDEX ucMSsnapshot_history ON dbo.MSsnapshot_history
- (agent_id, timestamp, start_time, time)
-
- if not exists (select * from sysindexes where name = 'nc1MSsnapshot_history')
- begin
- raiserror('Creating clustered index nc1MSsnapshot_history', 0,1)
- create nonclustered index nc1MSsnapshot_history on MSsnapshot_history(agent_id, start_time)
- end
-
- END
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSlogreader_history' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSlogreader_history', 0,1)
- /****************************************************************************/
- CREATE TABLE dbo.MSlogreader_history
- (
- agent_id int NOT NULL,
- runstatus int NOT NULL,
- start_time datetime NOT NULL,
- time datetime NOT NULL,
- duration int NOT NULL,
- comments nvarchar(255) NOT NULL,
- xact_seqno varbinary(16) NULL,
-
- -- Session summary statistics
- delivery_time int NOT NULL,
- delivered_transactions int NOT NULL,
- delivered_commands int NOT NULL,
- average_commands int NOT NULL,
- delivery_rate float NOT NULL,
- delivery_latency int NOT NULL,
-
- error_id int NOT NULL,
- timestamp NOT NULL
- )
-
- EXEC dbo.sp_MS_marksystemobject 'MSlogreader_history'
-
- raiserror('Creating clustered index ucMSlogreader_history', 0,1)
- CREATE UNIQUE CLUSTERED INDEX ucMSlogreader_history ON dbo.MSlogreader_history
- (agent_id, timestamp, runstatus, start_time, time)
-
- if not exists (select * from sysindexes where name = 'nc1MSlogreader_history')
- begin
- raiserror('Creating nonclustered index nc1MSlogreader_history', 0,1)
- create nonclustered index nc1MSlogreader_history on MSlogreader_history(agent_id, start_time)
- end
-
- END
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSdistribution_history' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSdistribution_history', 0,1)
- /****************************************************************************/
-
- CREATE TABLE dbo.MSdistribution_history
- (
- agent_id int NOT NULL,
- runstatus int NOT NULL,
- start_time datetime NOT NULL,
- time datetime NOT NULL,
- duration int NOT NULL,
- comments nvarchar(255) NOT NULL,
- xact_seqno varbinary(16) NULL,
-
- -- Current statistics
- current_delivery_rate float NOT NULL,
- current_delivery_latency int NOT NULL,
-
- -- Session summary statistics
- delivered_transactions int NOT NULL,
- delivered_commands int NOT NULL,
- average_commands int NOT NULL,
- delivery_rate float NOT NULL,
- delivery_latency int NOT NULL,
-
- -- Summary statistics across all sessions
- total_delivered_commands int NOT NULL,
-
- error_id int NOT NULL,
- updateable_row bit NOT NULL,
- timestamp NOT NULL
- )
-
- EXEC dbo.sp_MS_marksystemobject 'MSdistribution_history'
-
- raiserror('Creating clustered index ucMSdistribution_history', 0,1)
- CREATE UNIQUE CLUSTERED INDEX ucMSdistribution_history ON dbo.MSdistribution_history
- (agent_id, timestamp, runstatus, start_time, time)
-
-
- if not exists (select * from sysindexes where name = 'nc1MSdistribution_history')
- begin
- raiserror('Creating clustered index nc1MSdistribution_history', 0,1)
- create nonclustered index nc1MSdistribution_history on MSdistribution_history(agent_id, start_time)
- end
-
- END
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSmerge_history' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSmerge_history', 0,1)
- /****************************************************************************/
-
- CREATE TABLE dbo.MSmerge_history
- (
- agent_id int NOT NULL,
- runstatus int NOT NULL,
- start_time datetime NOT NULL,
- time datetime NOT NULL,
- duration int NOT NULL,
- comments nvarchar(255) NOT NULL,
- delivery_time int NOT NULL,
- delivery_rate float NOT NULL,
- publisher_insertcount int NULL,
- publisher_updatecount int NULL,
- publisher_deletecount int NULL,
- publisher_conflictcount int NULL,
- subscriber_insertcount int NULL,
- subscriber_updatecount int NULL,
- subscriber_deletecount int NULL,
- subscriber_conflictcount int NULL,
- error_id int NOT NULL,
- timestamp NOT NULL,
- updateable_row bit NOT NULL
- )
-
- EXEC dbo.sp_MS_marksystemobject 'MSmerge_history'
-
- raiserror('Creating clustered index ucMSmerge_history', 0,1)
- CREATE UNIQUE CLUSTERED INDEX ucMSmerge_history ON dbo.MSmerge_history
- (agent_id, timestamp, runstatus)
-
- if not exists (select * from sysindexes where name = 'nc1MSmerge_history')
- begin
- raiserror('Creating nonclustered index nc1MSmerge_history', 0,1)
- create nonclustered index nc1MSmerge_history on MSmerge_history(agent_id, runstatus, start_time)
- end
- END
- ELSE
- BEGIN
- IF NOT EXISTS (select * from syscolumns
- where name = 'updateable_row'
- and id=object_id('MSmerge_history'))
- BEGIN
- ALTER TABLE MSmerge_history ADD updateable_row bit default 1 NOT NULL
- END
-
- if not exists (select * from sysindexes where name = 'nc1MSmerge_history' and id=object_id('MSmerge_history'))
- begin
- raiserror('Creating nonclustered index nc1MSmerge_history', 0,1)
- create nonclustered index nc1MSmerge_history on MSmerge_history(agent_id, runstatus, start_time)
- end
- END
-
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSrepl_errors' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSrepl_errors', 0,1)
- /****************************************************************************/
-
- CREATE TABLE dbo.MSrepl_errors
- (
- id int NOT NULL,
- time datetime NOT NULL,
- error_type_id int NULL,
- source_type_id int NULL,
- source_name nvarchar(100) NULL,
- error_code sysname NULL,
- error_text ntext NULL,
- xact_seqno varbinary(16) NULL,
- command_id int NULL
- )
-
- EXEC dbo.sp_MS_marksystemobject 'MSrepl_errors'
-
- raiserror('Creating clustered index ucMSrepl_errors', 0,1)
- CREATE CLUSTERED INDEX ucMSrepl_errors ON dbo.MSrepl_errors
- (id, time) -- WITH ALLOW_DUP_ROW
- END
- ELSE
- BEGIN
- IF NOT EXISTS (select * from syscolumns
- where name = 'xact_seqno'
- and id=object_id('MSrepl_errors'))
- ALTER TABLE MSrepl_errors ADD xact_seqno varbinary(16) NULL
-
- IF NOT EXISTS (select * from syscolumns
- where name = 'command_id'
- and id=object_id('MSrepl_errors'))
- ALTER TABLE MSrepl_errors ADD command_id int NULL
- END
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSsnapshot_agents' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSsnapshot_agents', 0,1)
- /****************************************************************************/
-
- CREATE TABLE dbo.MSsnapshot_agents
- (
- id int IDENTITY NOT NULL,
- name nvarchar(100) NOT NULL,
- publisher_id smallint NOT NULL,
- publisher_db sysname NOT NULL,
- publication sysname NOT NULL,
- publication_type int NOT NULL, -- 0 transactional 1 snapshot 2 merge
- local_job bit NOT NULL,
- job_id binary(16) NULL,
- profile_id int NOT NULL
- )
-
- EXEC dbo.sp_MS_marksystemobject 'MSsnapshot_agents'
-
- raiserror('Creating clustered index ucMSsnapshot_agents', 0,1)
- CREATE CLUSTERED INDEX ucMSsnapshot_agents ON dbo.MSsnapshot_agents
- (publication, publisher_db, publisher_id)
-
- raiserror('Creatingindex iMSsnapshot_agents', 0,1)
- CREATE UNIQUE INDEX iMSsnapshot_agents ON dbo.MSsnapshot_agents
- (id)
- END
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSlogreader_agents' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSlogreader_agents', 0,1)
- /****************************************************************************/
-
- CREATE TABLE dbo.MSlogreader_agents
- (
- id int IDENTITY NOT NULL,
- name nvarchar(100) NOT NULL,
- publisher_id smallint NOT NULL,
- publisher_db sysname NOT NULL,
- publication sysname NOT NULL,-- Not used for SQL Server publisher
- local_job bit NOT NULL,
- job_id binary(16) NULL,
- profile_id int NOT NULL
- )
-
- EXEC dbo.sp_MS_marksystemobject 'MSlogreader_agents'
-
- raiserror('Creating clustered index ucMSlogreader_agents', 0,1)
- CREATE CLUSTERED INDEX ucMSlogreader_agents ON dbo.MSlogreader_agents
- (publisher_db, publisher_id)
-
- raiserror('Creatingindex iMSlogreader_agents', 0,1)
- CREATE UNIQUE INDEX iMSlogreader_agents ON dbo.MSlogreader_agents
- (id)
- END
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSdistribution_agents' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSdistribution_agents', 0,1)
- /****************************************************************************/
-
- CREATE TABLE dbo.MSdistribution_agents
- (
- id int IDENTITY NOT NULL,
- name nvarchar(100) NOT NULL,
- publisher_database_id int NOT NULL,
- publisher_id smallint NOT NULL,
- publisher_db sysname NOT NULL,
- publication sysname NOT NULL,
- subscriber_id smallint NULL,
- subscriber_db sysname NULL,
- subscription_type int NOT NULL,
- local_job bit NULL,
- job_id binary(16) NULL,
- subscription_guid binary(16) NOT NULL,
- profile_id int NOT NULL,
- anonymous_subid uniqueidentifier NULL,
- subscriber_name sysname NULL,
- virtual_agent_id int NULL,
- anonymous_agent_id int NULL,
- creation_date datetime default (getdate()) not NULL,
- queue_id sysname null,
- queue_status int default 0 not null,
- offload_enabled bit default 0 NOT NULL,
- offload_server sysname NULL,
- dts_package_name sysname NULL,
- dts_package_password nvarchar(524) NULL,
- dts_package_location int default 0 not null,
- sid varbinary(85) default suser_sid() not null,
- queue_server sysname NULL
- )
-
- EXEC dbo.sp_MS_marksystemobject 'MSdistribution_agents'
-
- raiserror('Creating clustered index ucMSdistribution_agents', 0,1)
- CREATE UNIQUE CLUSTERED INDEX ucMSdistribution_agents ON dbo.MSdistribution_agents
- (id)
-
- raiserror('Creatingindex iMSdistribution_agents', 0,1)
- CREATE INDEX iMSdistribution_agents ON dbo.MSdistribution_agents
- (publication, publisher_db, publisher_id, subscriber_id, subscriber_db, anonymous_subid)
- END
-
- if not exists (select * from syscolumns where
- id = object_id('MSdistribution_agents') and
- name = 'creation_date')
- begin
- alter table MSdistribution_agents add creation_date datetime default (getdate()) not null
- end
-
- if not exists (select * from syscolumns where
- id = object_id('MSdistribution_agents') and
- name = 'offload_enabled')
- begin
- alter table MSdistribution_agents add offload_enabled bit default 0 not null
- end
-
- if not exists (select * from syscolumns where
- id = object_id('MSdistribution_agents') and
- name = 'offload_server')
- begin
- alter table MSdistribution_agents add offload_server sysname null
- end
-
- if not exists (select * from syscolumns where
- id = object_id('MSdistribution_agents') and
- name = 'queue_id')
- begin
- alter table MSdistribution_agents add queue_id sysname null
- end
-
- if not exists (select * from syscolumns where
- id = object_id('MSdistribution_agents') and
- name = 'queue_status')
- begin
- alter table MSdistribution_agents add queue_status int default 0 not null
- end
-
- if not exists (select * from syscolumns where
- id = object_id('MSdistribution_agents') and
- name = 'dts_package_name')
- begin
- alter table MSdistribution_agents add dts_package_name sysname null
- end
- if not exists (select * from syscolumns where
- id = object_id('MSdistribution_agents') and
- name = 'dts_package_password')
- begin
- alter table MSdistribution_agents add dts_package_password nvarchar(524) null
- end
-
- if not exists (select * from syscolumns where
- id = object_id('MSdistribution_agents') and
- name = 'dts_package_location')
- begin
- alter table MSdistribution_agents add dts_package_location int default 0 not null
- end
-
- if not exists (select * from syscolumns where
- id = object_id('MSdistribution_agents') and
- name = 'sid')
- begin
- -- set sid to be the upgrade user. db_owner or sysadmin
- -- can drop the agent entry
- alter table MSdistribution_agents add sid varbinary(85) default suser_sid() not null
- end
-
- if not exists (select * from syscolumns where
- id = object_id('MSdistribution_agents') and
- name = 'queue_server')
- begin
- alter table MSdistribution_agents add queue_server sysname null
- EXEC dbo.sp_MSupdate_mqserver_distdb
- end
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSmerge_agents' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSmerge_agents', 0,1)
- /****************************************************************************/
-
- CREATE TABLE dbo.MSmerge_agents
- (
- id int IDENTITY NOT NULL,
- name nvarchar(100) NOT NULL,
- publisher_id smallint NOT NULL,
- publisher_db sysname NOT NULL,
- publication sysname NOT NULL,
- subscriber_id smallint NULL,
- subscriber_db sysname NULL,
- local_job bit NULL,
- job_id binary(16) NULL,
- profile_id int NULL,
- anonymous_subid uniqueidentifier NULL,
- subscriber_name sysname NULL,
- creation_date datetime default (getdate()) not NULL,
- offload_enabled bit default 0 NOT NULL,
- offload_server sysname NULL,
- sid varbinary(85) default suser_sid() not null
- )
-
- EXEC dbo.sp_MS_marksystemobject 'MSmerge_agents'
-
- raiserror('Creating clustered index ucMSmerge_agents', 0,1)
- CREATE CLUSTERED INDEX ucMSmerge_agents ON dbo.MSmerge_agents
- (publication, publisher_db, publisher_id, subscriber_id, subscriber_db, anonymous_subid)
-
- raiserror('Creatingindex iMSmerge_agents', 0,1)
- CREATE UNIQUE INDEX iMSmerge_agents ON dbo.MSmerge_agents
- (id)
- END
-
-
- -- Need to re_visit the indexing of this table
- if not exists (select * from sysobjects where name = 'MSrepl_identity_range')
- begin
- raiserror('Creating table MSrepl_identity_range',0,1)
-
- create table dbo.MSrepl_identity_range (
- publisher sysname not NULL,
- publisher_db sysname not NULL,
- tablename sysname not NULL,
- identity_support int NULL,
- next_seed bigint NULL, --resource control
- pub_range bigint NULL, --publisher range
- range bigint NULL, -- set by sp_addmergearticle
- max_identity bigint NULL, --resource control
- threshold int NULL, --in percentage, set by sp_addmergearticle
- current_max bigint NULL --max value for current check constraint,set by sp_addmergearticle
- )
- exec dbo.sp_MS_marksystemobject MSrepl_identity_range
-
- grant select on MSrepl_identity_range to public
- end
-
- if not exists (select * from syscolumns where
- id = object_id('MSmerge_agents') and
- name = 'creation_date')
- begin
- alter table MSmerge_agents add creation_date datetime default (getdate()) not null
- end
-
- if not exists (select * from syscolumns where
- id = object_id('MSmerge_agents') and
- name = 'offload_enabled')
- begin
- alter table MSmerge_agents add offload_enabled bit default 0 not null
- end
-
- if not exists (select * from syscolumns where
- id = object_id('MSmerge_agents') and
- name = 'offload_server')
- begin
- alter table MSmerge_agents add offload_server sysname null
- end
-
- if not exists (select * from syscolumns where
- id = object_id('MSmerge_agents') and
- name = 'sid')
- begin
- -- set sid to be the upgrade user. db_owner or sysadmin
- -- can drop the agent entry
- alter table MSmerge_agents add sid varbinary(85) default suser_sid() not null
- end
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSpublication_access' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSpublication_access', 0,1)
- /****************************************************************************/
-
- CREATE TABLE dbo.MSpublication_access
- (
- publication_id int NULL, -- Publication_id is unique in distribution database.
- login sysname NOT NULL
- -- Logins in the publication access list, they nust
- -- exist at both publisher and distributor side.
- )
-
- EXEC dbo.sp_MS_marksystemobject 'MSpublication_access'
-
- raiserror('Creating clustered index ucMSpublication_access', 0,1)
- CREATE UNIQUE CLUSTERED INDEX ucMSpublication_access ON dbo.MSpublication_access
- (publication_id, login)
- END
-
- -- For b3 upgrade
- if NOT EXISTS (select * from syscolumns where name='retention' and id=object_id('MSpublications'))
- begin
- alter table MSpublications add retention int NULL
- UPDATE msdb..MSdistributiondbs set max_distretention=72 where
- name = db_name() collate database_default
- end
-
- -- drop default_access column
- if exists (select * from syscolumns where id = object_id('MSpublications') and
- name = 'default_access')
- begin
- alter table MSpublications drop column default_access
- end
-
- -- Drop publisher_id column
- if EXISTS (select * from syscolumns where name='publisher_id' and id=object_id('MSpublication_access'))
- begin
- drop index MSpublication_access.ucMSpublication_access
-
- alter table MSpublication_access drop column publisher_id
-
- raiserror('Creating clustered index ucMSpublication_access', 0,1)
- CREATE CLUSTERED INDEX ucMSpublication_access ON dbo.MSpublication_access
- (publication_id, login)
- end
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSqreader_agents' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSqreader_agents', 0,1)
- /****************************************************************************/
-
- CREATE TABLE dbo.MSqreader_agents
- (
- id int IDENTITY NOT NULL,
- name nvarchar(100) NULL,
- job_id binary(16) NULL,
- profile_id int NULL
- )
-
- EXEC dbo.sp_MS_marksystemobject 'MSqreader_agents'
-
- raiserror('Creating unique index ucMSqreader_agents', 0,1)
- CREATE UNIQUE INDEX ucMSqreader_agents ON dbo.MSqreader_agents
- (id)
- END
-
- -- add columns for existing table
- if not exists (select * from syscolumns where
- id = object_id('MSqreader_agents') and
- name = 'profile_id')
- begin
- alter table dbo.MSqreader_agents add profile_id int NULL
- end
-
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSqreader_history' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSqreader_history', 0,1)
- /****************************************************************************/
-
- CREATE TABLE dbo.MSqreader_history
- (
- agent_id int NOT NULL,
- publication_id int NULL,
- runstatus int NOT NULL,
- start_time datetime NOT NULL,
- time datetime NOT NULL,
- duration int NOT NULL,
- comments nvarchar(255) NOT NULL,
- transaction_id nvarchar(40) NULL,
- transaction_status int NULL,
- transactions_processed int NULL DEFAULT 0,
- commands_processed int NULL DEFAULT 0,
- delivery_rate float NOT NULL DEFAULT 0.0,
- transaction_rate float NOT NULL DEFAULT 0.0,
- subscriber sysname NULL,
- subscriberdb sysname NULL,
- error_id int NULL,
- timestamp NOT NULL
- )
-
- EXEC dbo.sp_MS_marksystemobject 'MSqreader_history'
-
- raiserror('Creating clustered index ucMSqreader_history', 0,1)
- CREATE CLUSTERED INDEX ucMSqreader_history ON dbo.MSqreader_history
- (agent_id, timestamp, runstatus, start_time, time)
- END
-
- -- alter column publication_id
- if not exists (select * from syscolumns where
- id = object_id('MSqreader_history') and
- name = 'publication_id')
- begin
- alter table dbo.MSqreader_history alter column publication_id int NULL
- end
-
- -- add columns for existing table
- if not exists (select * from syscolumns where
- id = object_id('MSqreader_history') and
- name = 'error_id')
- begin
- alter table dbo.MSqreader_history add error_id int NULL
- end
-
- if not exists (select * from syscolumns where
- id = object_id('MSqreader_history') and
- name = 'transactions_processed')
- begin
- alter table dbo.MSqreader_history add transactions_processed int NULL DEFAULT 0
- end
-
- if not exists (select * from syscolumns where
- id = object_id('MSqreader_history') and
- name = 'delivery_rate')
- begin
- alter table dbo.MSqreader_history add delivery_rate float NOT NULL DEFAULT 0.0
- end
-
- if not exists (select * from syscolumns where
- id = object_id('MSqreader_history') and
- name = 'transaction_rate')
- begin
- alter table dbo.MSqreader_history add transaction_rate float NOT NULL DEFAULT 0.0
- end
-
- IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'MSrepl_backup_lsns' and type = 'U')
- BEGIN
- /****************************************************************************/
- raiserror('Creating table MSrepl_backup_lsns', 0,1)
- /****************************************************************************/
-
- CREATE TABLE dbo.MSrepl_backup_lsns
- (
- publisher_database_id int NOT NULL,
- valid_xact_id varbinary(16) NULL,
- valid_xact_seqno varbinary (16 ) NULL,
- next_xact_id varbinary(16) NULL,
- next_xact_seqno varbinary (16 ) NULL
- )
-
- EXEC dbo.sp_MS_marksystemobject 'MSrepl_backup_lsns'
-
- raiserror('Creating clustered index ucMSrepl_backup_lsns', 0,1)
- CREATE UNIQUE CLUSTERED INDEX ucMSrepl_backup_lsns ON dbo.MSrepl_backup_lsns
- (publisher_database_id)
-
- if exists (select * from MSpublisher_databases)
- begin
- /****************************************************************************/
- raiserror('Upgrading MSrepl_backup_lsns', 0,1)
- /****************************************************************************/
- insert into MSrepl_backup_lsns select d.id,
- NULL, NULL, NULL, NULL from MSpublisher_databases d
- -- No need to set the lsns in the table since the 'sync with backup' option is
- -- new in 8.0
- end
-
- END
- GO
-
- dump tran master with no_log
- go
-
- --
- -- sp_MSupdate_mqserver_distdb
- --
- -- This procedure is called to upgrade the MSMQ related entries in
- -- MSdistribution_agents in distribution database - this processing
- -- cannot be done directly inside sp_MScreate_dist_tables or sp_vupgrade_distdb
- -- since we need the queue_server column for the processing and we can
- -- get a syntax error if the table exists without the column
- --
- -- Assumption : MSsubscription_agents has been created
- -- and column queue_server exists
- --
- raiserror('Creating procedure sp_MSupdate_mqserver_distdb', 0,1)
- go
- create procedure sp_MSupdate_mqserver_distdb
- as
- begin
- if exists (select * from MSdistribution_agents
- where queue_id IS NOT NULL and queue_id != N'mssqlqueue' and queue_server IS NULL)
- begin
- --
- -- we have entries for active Queued subscriptions using MSMQ that need upgrade
- --
- declare @queue_server sysname
-
- --
- -- prepare the queue server name
- --
- select @queue_server = @@servername
- if (charindex(N'\', @queue_server) > 0)
- select @queue_server = substring(@queue_server, 1, charindex(N'\', @queue_server) - 1)
-
- --
- -- update the queue_server column for these entries
- --
- update MSdistribution_agents
- set queue_server = @queue_server
- where queue_id IS NOT NULL and queue_id != N'mssqlqueue' and queue_server IS NULL
- end
- end
- go
-
- raiserror('Creating procedure sp_MSadd_distributor_alerts_and_responses', 0,1)
- go
- create procedure sp_MSadd_distributor_alerts_and_responses
- @from_scripting bit = 0
- as
-
- declare @description nvarchar(500)
- declare @category_name sysname
- declare @agent_name sysname
- declare @response_job nvarchar(100)
- declare @alert_name nvarchar(100)
- declare @alert_id int
- declare @retcode int
-
- --
- -- Add replication alert response jobs
- --
- select @category_name = name FROM msdb.dbo.syscategories where category_id = 18
-
- -- Add Validation failure response job
- -- (20570,10,0,'Reinitialize Subscriptions On Validation Failure.', 1033) -- Title of a alert response job
- -- (20571,10,0,'Reiniitializes all subscriptions that have failed due to data validation failures.', 1033) -- Description of a alert response job
- set @response_job = formatmessage(20570)
- set @description = formatmessage(20571)
-
- if @from_scripting = 0
- begin
- -- Delete the job if it already exists
- if (exists (select * from msdb..sysjobs_view where name = @response_job collate database_default))
- begin
- exec @retcode = msdb.dbo.sp_delete_job @job_name = @response_job
- if @@ERROR <> 0 or @retcode <> 0
- return (1)
- end
-
- execute @retcode = msdb.dbo.sp_MSadd_repl_job
- @response_job,
- @subsystem = 'TSQL',
- @server = @@SERVERNAME,
- @databasename = 'master',
- @description = @description,
- @command = 'exec dbo.sp_MSreinit_failed_subscriptions @failure_level = 1',
- @enabled = 1,
- @loghistcompletionlevel = 0,
- @retryattempts = 0,
- @category_name = @category_name
- if @@ERROR <> 0 or @retcode <> 0
- return (1)
- end
-
- --
- -- Add replication alerts
- --
-
- -- Get Replication category name (assumes category_id = 20)
- select @category_name = name FROM msdb.dbo.syscategories where category_id = 20
-
- -- Add Failure Alert
- set @alert_name = formatmessage(20536)
- set @alert_id = 14151 -- corresponding to formatmessage(20536), Failure alert
- if not exists (select * from msdb.dbo.sysalerts where message_id = @alert_id)
- begin
- exec @retcode = msdb.dbo.sp_add_alert @enabled = 0, @name = @alert_name, @category_name = @category_name, @message_id = 14151
- if @@error <> 0 or @retcode <> 0
- return 1
- end
-
- -- Add Retry Alert
- set @alert_name=formatmessage(20537)
- set @alert_id = 14152 -- corresponding to formatmessage(20537), Retry alert
- if not exists (select * from msdb.dbo.sysalerts where message_id = @alert_id)
- begin
- exec @retcode = msdb.dbo.sp_add_alert @enabled = 0, @name = @alert_name, @category_name = @category_name, @message_id = 14152
- if @@error <> 0 or @retcode <> 0
- return 1
- end
-
- -- Add Success Alert
- set @alert_name=formatmessage(20540)
- set @alert_id = 14150 -- corresponding to formatmessage(20540),
- if not exists (select * from msdb.dbo.sysalerts where message_id = @alert_id)
- begin
- exec @retcode = msdb.dbo.sp_add_alert @enabled = 0, @name = @alert_name, @category_name = @category_name, @message_id = 14150
- if @@error <> 0 or @retcode <> 0
- return 1
- end
-
- -- Add Shutdown request Alert
- set @alert_name=formatmessage(20578)
- set @alert_id = 20578 -- Custom agent shutdown message
- if not exists (select * from msdb.dbo.sysalerts where message_id = @alert_id)
- begin
- exec @retcode = msdb.dbo.sp_add_alert @enabled = 0, @name = @alert_name, @category_name = @category_name, @message_id = 20578
- if @@error <> 0 or @retcode <> 0
- return 1
- end
-
- -- Add Validation Failure Alert
- set @alert_name=formatmessage(20565)
- set @alert_id = 20574 -- corresponding to formatmessage(20574),
- if not exists (select * from msdb.dbo.sysalerts where message_id = @alert_id)
- begin
- exec @retcode = msdb.dbo.sp_add_alert @enabled = 0, @name = @alert_name, @category_name = @category_name, @message_id = 20574
- if @@error <> 0 or @retcode <> 0
- return 1
- end
-
- -- Add Validation Success Alert
- set @alert_name=formatmessage(20566)
- set @alert_id = 20575 -- corresponding to formatmessage(20575),
- if not exists (select * from msdb.dbo.sysalerts where message_id = @alert_id)
- begin
- exec @retcode = msdb.dbo.sp_add_alert @enabled = 0, @name = @alert_name, @category_name = @category_name, @message_id = 20575
- if @@error <> 0 or @retcode <> 0
- return 1
- end
-
- -- Add Reinitialized after Validation Failure
- set @alert_name=formatmessage(20573)
- set @alert_id = 20572 -- corresponding to formatmessage(20566),
- if not exists (select * from msdb.dbo.sysalerts where message_id = @alert_id)
- begin
- exec @retcode = msdb.dbo.sp_add_alert @enabled = 0, @name = @alert_name, @category_name = @category_name, @message_id = 20572
- if @@error <> 0 or @retcode <> 0
- return 1
- end
-
- GO
-
-
- raiserror('Creating procedure sp_MSdrop_distributor_alerts_and_responses', 0,1)
- go
- create proc sp_MSdrop_distributor_alerts_and_responses
- as
-
- declare @name nvarchar(100)
- declare @alert_id int
- declare @retcode int
-
- --
- -- Delete alerts and response jobs
- --
-
- -- Drop Replication Checkup Agent
- select @name = formatmessage(20533)
- IF EXISTS (SELECT * FROM msdb..sysjobs_view WHERE name = @name collate database_default and
- UPPER(originating_server) = UPPER(CONVERT(sysname, SERVERPROPERTY('ServerName'))))
- BEGIN
- EXEC @retcode = msdb.dbo.sp_delete_job @job_name = @name
- IF @@ERROR <> 0 or @retcode <> 0
- BEGIN
- return (1)
- END
- END
-
- -- Drop Reinit subscription response job
- set @name = formatmessage(20570)
- IF EXISTS (SELECT * FROM msdb..sysjobs_view WHERE name = @name collate database_default and
- UPPER(originating_server) = UPPER(CONVERT(sysname, SERVERPROPERTY('ServerName'))))
- BEGIN
- EXEC @retcode = msdb.dbo.sp_delete_job @job_name = @name
- IF @@ERROR <> 0 or @retcode <> 0
- BEGIN
- return (1)
- END
- END
-
- -- Drop the alerts
- set @alert_id = 14150 -- success alert
- set @name=formatmessage(20540)
- if exists (select * from msdb.dbo.sysalerts where message_id=@alert_id)
- begin
- select @name=name from msdb.dbo.sysalerts where message_id=@alert_id
- exec @retcode = msdb.dbo.sp_delete_alert @name
- if @@error <> 0 or @retcode <> 0
- return (1)
- end
-
- set @alert_id = 14151 -- failure alert
- set @name = formatmessage(20536)
- if exists (select * from msdb.dbo.sysalerts where message_id=@alert_id)
- begin
- select @name=name from msdb.dbo.sysalerts where message_id=@alert_id
- exec @retcode = msdb.dbo.sp_delete_alert @name
- if @@error <> 0 or @retcode <> 0
- return (1)
- end
-
- set @alert_id = 14152 -- retry alert
- set @name = formatmessage(20537)
- if exists (select * from msdb.dbo.sysalerts where message_id=@alert_id)
- begin
- select @name=name from msdb.dbo.sysalerts where message_id=@alert_id
- exec @retcode = msdb.dbo.sp_delete_alert @name
- if @@error <> 0 or @retcode <> 0
- return (1)
- end
-
- set @alert_id = 14153 -- warnning alert
- set @name = formatmessage(20540)
- if exists (select * from msdb.dbo.sysalerts where message_id=@alert_id)
- begin
- select @name=name from msdb.dbo.sysalerts where message_id=@alert_id
- exec @retcode = msdb.dbo.sp_delete_alert @name
- if @@error <> 0 or @retcode <> 0
- return (1)
- end
-
- -- Remove Validation Failure Alert
- set @alert_id = 20574
- set @name = formatmessage(20565)
- if exists (select * from msdb.dbo.sysalerts where message_id=@alert_id)
- begin
- select @name=name from msdb.dbo.sysalerts where message_id=@alert_id
- exec @retcode = msdb.dbo.sp_delete_alert @name
- if @@error <> 0 or @retcode <> 0
- return (1)
- end
-
- -- Remove Validation Sucess Alert
- set @alert_id = 20575
- set @name = formatmessage(20566)
- if exists (select * from msdb.dbo.sysalerts where message_id=@alert_id)
- begin
- select @name=name from msdb.dbo.sysalerts where message_id=@alert_id
- exec @retcode = msdb.dbo.sp_delete_alert @name
- if @@error <> 0 or @retcode <> 0
- return (1)
- end
-
- -- Remove Reinitialized after Validation Failure
- set @alert_id = 20525 -- checksum alert
- set @name = formatmessage(20573)
- if exists (select * from msdb.dbo.sysalerts where message_id=@alert_id)
- begin
- select @name=name from msdb.dbo.sysalerts where message_id=@alert_id
- exec @retcode = msdb.dbo.sp_delete_alert @name
- if @@error <> 0 or @retcode <> 0
- return (1)
- end
-
- -- Remove subscription reinitialized after validation failure
- set @alert_id = 20572 -- corresponding to formatmessage(20566),
- set @name=formatmessage(20573)
- if exists (select * from msdb.dbo.sysalerts where message_id=@alert_id)
- begin
- select @name=name from msdb.dbo.sysalerts where message_id=@alert_id
- exec @retcode = msdb.dbo.sp_delete_alert @name
- if @@error <> 0 or @retcode <> 0
- return (1)
- end
-
- -- Remove Shutdown request Alert
- set @alert_id = 20578 -- Custom agent shutdown message
- set @name=formatmessage(20578)
- if exists (select * from msdb.dbo.sysalerts where message_id=@alert_id)
- begin
- select @name=name from msdb.dbo.sysalerts where message_id=@alert_id
- exec @retcode = msdb.dbo.sp_delete_alert @name
- if @@error <> 0 or @retcode <> 0
- return (1)
- end
-
- GO
- raiserror('Creating procedure sp_adddistributor', 0,1)
- go
-
- CREATE PROCEDURE sp_adddistributor (
- @distributor sysname, /* distributor server name */
- @heartbeat_interval int = 10, -- minutes
- @password sysname = NULL,
- @from_scripting bit = 0
-
- ) AS
-
- SET NOCOUNT ON
-
- /*
- ** Declarations.
- */
- DECLARE @retcode int
- DECLARE @agentname nvarchar(100)
- DECLARE @command nvarchar(255)
- DECLARE @distribution_db sysname
- DECLARE @distproc nvarchar(255)
- DECLARE @dist_rpcname sysname
- DECLARE @server_added bit
- declare @login sysname
-
- select @server_added = 0
- select @login = 'distributor_admin'
-
- /*
- ** Check if replication components are installed on this server
- */
- exec @retcode = dbo.sp_MS_replication_installed
- if (@retcode <> 1)
- begin
- return (1)
- end
-
- -- Must be at master db.
- IF db_name() <> 'master'
- BEGIN
- RAISERROR(5001, 16,-1)
- return (1)
- END
- /*
- ** Parameter Check: @distributor.
- ** Check to make sure that the distributor is not NULL and that it
- ** conforms to the rules for identifiers.
- */
- IF @distributor IS NULL
- BEGIN
- RAISERROR (14043, 16, -1, '@distributor')
- RETURN (1)
- END
-
- EXECUTE @retcode = dbo.sp_validname @distributor
-
- IF @@ERROR <> 0 OR @retcode <> 0
- RETURN (1)
-
- IF @password = N''
- select @password = NULL
-
- -- Seed default password with random value only for a local distributor.
- IF (@password is null) AND (UPPER(@@SERVERNAME) = UPPER(@distributor))
- select @password = convert(sysname, newid())
- /*
- ** Check to make sure that the distributor doesn't already exist.
- */
- SELECT @dist_rpcname = NULL
- SELECT @dist_rpcname = srvname FROM master..sysservers
- WHERE srvstatus & 8 <> 0
- IF @dist_rpcname IS NOT NULL
- BEGIN
- RAISERROR (14099, 16, -1, @dist_rpcname)
- RETURN(1)
- END
-
- -- drop repl_distributor if it exists.
- if exists (select * from master..sysservers where lower(srvname) =
- 'repl_distributor' collate database_default)
- begin
- exec @retcode = dbo.sp_dropserver 'repl_distributor', 'droplogins'
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RETURN(1)
- END
- end
-
- -- Add the linked server entry for the distributor
- -- Note we do this even for local server for consistancy
- EXECUTE @retcode = dbo.sp_addserver 'repl_distributor'
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RETURN (1)
- END
-
- select @server_added = 1
-
- -- Mark system link
- EXECUTE @retcode = dbo.sp_serveroption 'repl_distributor', 'system','true'
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RETURN (1)
- END
-
- EXECUTE @retcode = dbo.sp_setnetname 'repl_distributor', @distributor
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- goto UNDO
- END
-
- exec @retcode = dbo.sp_addlinkedsrvlogin
- @rmtsrvname= 'repl_distributor',
- @useself = 'false',
- @locallogin = NULL,
- @rmtuser = @login,
- @rmtpassword = @password
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- goto UNDO
- END
-
-
- /*
- ** If this is not the local server, remote distributor must be set up first
- */
- IF UPPER(@distributor) <> UPPER(@@SERVERNAME)
- BEGIN
- /* Check distributor version, 7.0 distributor should error out*/
- declare @dist_ver int
- select @dist_ver = 0
- EXEC @retcode = repl_distributor.master.dbo.sp_executesql N'select @dist_ver = @@microsoftversion',
- N'@dist_ver int output', @dist_ver output
- IF (@retcode <> 0 or @@ERROR <> 0)
- begin
- GOTO UNDO
- end
- if (@dist_ver < 0x07320000 )
- begin
- RAISERROR (21320,16,-1)
- GOTO UNDO
- end
- /*
- ** Test to see if the local server is defined as publisher
- ** at the remove distributor.
- ** Note: cannot call sp_helpdistributor locally since the server is not
- ** marked for distribution.
- ** We can not move the serveroption call before this RPC because RPC failure
- ** may cause the SP to terminate. Thus, we can not UNDO the server option.
- */
- SELECT @distproc = 'repl_distributor.master.dbo.sp_helpdistributor'
-
- DECLARE @loc_directory nvarchar(255)
- DECLARE @loc_account nvarchar(255)
- DECLARE @loc_mindistretention int
- DECLARE @loc_maxdistretention int
- DECLARE @loc_historyretention int
- DECLARE @loc_historycleanupagent nvarchar(100)
- DECLARE @loc_distribcleanupagent nvarchar(100)
- DECLARE @alert_name nvarchar(100)
- DECLARE @alert_id int
-
- EXECUTE @distproc
- @distributor OUTPUT,
- @distribution_db OUTPUT,
- @loc_directory OUTPUT,
- @loc_account OUTPUT,
- @loc_mindistretention OUTPUT,
- @loc_maxdistretention OUTPUT,
- @loc_historyretention OUTPUT,
- @loc_historycleanupagent OUTPUT,
- @loc_distribcleanupagent OUTPUT,
- @@SERVERNAME,
- @local = 'local'
-
- IF @@error <> 0 OR @retcode <> 0 OR @distribution_db is NULL
- BEGIN
- RAISERROR (21007,16,-1)
- GOTO UNDO
- END
-
- /* Activate the dist publisher at the remote distributor */
- SELECT @distproc = 'repl_distributor.master.dbo.sp_changedistpublisher'
- EXECUTE @retcode = @distproc @@SERVERNAME, 'active','true'
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- GOTO UNDO
- END
- END
- ELSE
- /* set the registry */
- BEGIN
- EXEC @retcode = dbo.sp_MScreate_distributor_tables
- if @@error <> 0 or @retcode <> 0
- goto UNDO
-
- declare @distributor_login sysname
- select @distributor_login = 'distributor_admin'
-
- -- Add publisher rpc login
- if not exists (select * from master..syslogins where loginname = @distributor_login collate database_default)
- begin
- EXEC @retcode = dbo.sp_addlogin @loginame = @distributor_login,
- @passwd = @password
- if @@error <> 0 or @retcode <> 0
- goto UNDO
- end
- else
- begin
- -- Change the password if the distributor is local
- EXEC @retcode = dbo.sp_password NULL, @password, 'distributor_admin'
- if @@error <> 0 or @retcode <> 0
- goto UNDO
- end
-
- -- Add the login to sysadmin
- -- Refer to sp_MSpublication_access in distribution db
- if is_srvrolemember('sysadmin', @distributor_login) <> 1
- begin
- exec @retcode = dbo.sp_addsrvrolemember @distributor_login, 'sysadmin'
- IF @@error <> 0 OR @retcode <> 0
- GOTO UNDO
- end
-
- if @from_scripting <> 1
- begin
- -- Add Replication Agent Checkup Agent
- exec @retcode = dbo.sp_MScreate_replication_checkup_agent @heartbeat_interval = @heartbeat_interval
- if @@error <> 0 or @retcode <> 0
- goto UNDO
- end
-
- delete msdb..MSdistributor where property = 'heartbeat_interval'
- if @@error <> 0
- goto UNDO
- insert into msdb..MSdistributor (property, value) values ('heartbeat_interval',
- convert(nvarchar(10), @heartbeat_interval))
- if @@error <> 0
- goto UNDO
-
- -- Add Replication Alerts and Response Jobs
- exec @retcode = dbo.sp_MSadd_distributor_alerts_and_responses
- @from_scripting = @from_scripting
- if @@error <> 0 or @retcode <> 0
- goto UNDO
-
- END
-
-
- /*
- ** Set the server option to indicate that this is a distributor.
- **
- */
- EXECUTE @retcode = dbo.sp_serveroption 'repl_distributor', 'dist', true
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- GOTO UNDO
- END
-
- -- Set sp_MSrepl_startup to be a startup stored procedure
- -- Note: This needs to be after the marking the distribution server
- exec @retcode = dbo.sp_procoption 'sp_MSrepl_startup', 'startup', 'true'
- if @@error <> 0 or @retcode <> 0
- goto UNDO1
-
- exec @retcode = dbo.sp_MSrepl_startup
- if @@error <> 0 or @retcode <> 0
- goto UNDO1
-
- RETURN (0)
-
- UNDO1:
- exec dbo.sp_serveroption 'repl_distributor', 'dist', false
-
- UNDO:
- IF @server_added = 1
- begin
- -- Drop the remote logins, otherwise, sp_dropserver will fail.
- EXECUTE dbo.sp_dropserver 'repl_distributor', 'droplogins'
- end
-
- RETURN (1)
- GO
-
-
- raiserror('Creating procedure sp_changedistributor_property', 0,1)
- go
-
- CREATE PROCEDURE sp_changedistributor_property (
- @property sysname = NULL, /* The property to change */
- @value nvarchar(255) = NULL /* The new property value */
- ) AS
-
- declare @retcode int
- declare @new_heartbeat_interval int
-
- -- Check to make sure the local server is a distributor
- if not exists (SELECT * FROM master..sysservers
- WHERE srvstatus & 8 <> 0 and
- UPPER(datasource) = UPPER(@@servername) collate database_default)
- begin
- RAISERROR (14114, 16, -1, @@SERVERNAME)
- return(1)
- end
-
- -- Return list of properties if @property is NULL
- if @property is NULL
- begin
- create table #tab1 (properties sysname collate database_default not null)
- insert into #tab1 values ('heartbeat_interval')
- select * from #tab1
- return (0)
- end
-
- if @property is NULL
- begin
- if exists (select name from msdb..sysobjects where name = 'MSdistributor')
- begin
- select property from msdb..MSdistributor
- return 0
- end
- return 1
- end
-
- -- Check for valid property
- IF LOWER(@property collate SQL_Latin1_General_CP1_CS_AS) NOT IN ('heartbeat_interval')
- BEGIN
- RAISERROR (14154, 16, -1)
- RETURN (1)
- END
-
- if LOWER(@property collate SQL_Latin1_General_CP1_CS_AS) = 'heartbeat_interval'
- begin
- if exists (select name from msdb..sysobjects where name = 'MSdistributor')
- begin
- update msdb..MSdistributor set value = @value where property = @property
- if @@error <> 0
- return 1
- select @new_heartbeat_interval = CONVERT(int, @value)
- exec @retcode = dbo.sp_MScreate_replication_checkup_agent @heartbeat_interval =
- @new_heartbeat_interval
- if @@error <> 0 or @retcode <> 0
- return 1
- end
- else
- return 1
- end
-
- return (0)
-
- GO
-
- raiserror('Creating procedure sp_helpdistributor_properties', 0,1)
- go
-
- CREATE PROCEDURE sp_helpdistributor_properties
- AS
-
- if exists (select name from msdb..sysobjects where name = 'MSdistributor')
- begin
- -- There is currently only one property, so this will work
- select 'heartbeat_interval' = convert(int, value) from msdb..MSdistributor where
- property = 'heartbeat_interval'
- return (0)
- end
- return (1)
- GO
-
- raiserror('Creating procedure sp_dropdistributor', 0,1)
- go
-
- CREATE PROCEDURE sp_dropdistributor
- @no_checks bit = 0,
- @ignore_distributor bit = 0
- AS
-
- SET NOCOUNT ON
-
- /*
- ** Declarations.
- */
- DECLARE @retcode int
- DECLARE @distributor sysname
- DECLARE @agentname nvarchar(100)
- DECLARE @distbit int
- DECLARE @distribdb sysname
- DECLARE @foundSubscriber int
- DECLARE @proc nvarchar(255)
- declare @optname sysname
- declare @name sysname
- DECLARE @transpublishdb_bit int
- DECLARE @mergepublishdb_bit int
- declare @job_name nvarchar(100)
- declare @alert_name nvarchar(100)
-
- declare @dist_rpcname sysname
-
- declare @alert_id int
-
- SELECT @transpublishdb_bit = 1
- SELECT @mergepublishdb_bit = 4
- SELECT @foundSubscriber = 0
- SELECT @distbit = 16
-
- -- Get distributor name
- select @distributor = datasource, @dist_rpcname = srvname from master..sysservers
- WHERE srvstatus & 8 <> 0
- if @distributor is null
- BEGIN
- RAISERROR (21043, 16, -1)
- RETURN(1)
- END
-
- if @no_checks = 1
- begin
- -- We are in bruteforce cleanup mode, drop everything.
- DECLARE hCdropdistributor CURSOR LOCAL FAST_FORWARD FOR
- SELECT name, N'publish' FROM master..sysdatabases
- WHERE (category & @transpublishdb_bit) <> 0
- UNION
- select name, N'merge publish' from master..sysdatabases
- WHERE (category & @mergepublishdb_bit) <> 0
- FOR READ ONLY
-
- OPEN hCdropdistributor
- FETCH hCdropdistributor INTO @name, @optname
-
- WHILE (@@fetch_status <> -1)
- BEGIN
-
- EXECUTE @retcode = dbo.sp_replicationdboption
- @dbname = @name,
- @optname = @optname,
- @value = 'false',
- @ignore_distributor = @ignore_distributor
-
- IF @@ERROR <> 0 OR @retcode <> 0
- BEGIN
- CLOSE hCdropdistributor
- DEALLOCATE hCdropdistributor
- RETURN (1)
- END
- FETCH hCdropdistributor INTO @name, @optname
- end
-
- CLOSE hCdropdistributor
- DEALLOCATE hCdropdistributor
-
- -- Drop subscriber
- EXECUTE @retcode = dbo.sp_dropsubscriber
- @subscriber = 'all',
- @ignore_distributor = @ignore_distributor
-
- IF @@ERROR <> 0 OR @retcode <> 0
- RETURN (1)
-
- IF UPPER(@distributor) = UPPER(@@SERVERNAME)
- begin
- -- Clean up dist publishers
- DECLARE hCdropdistributor CURSOR LOCAL FAST_FORWARD FOR
- SELECT name FROM msdb..MSdistpublishers
- FOR READ ONLY
-
- OPEN hCdropdistributor
- FETCH hCdropdistributor INTO @name
-
- WHILE (@@fetch_status <> -1)
- BEGIN
- exec @retcode = dbo.sp_dropdistpublisher
- @publisher = @name,
- @no_checks = 1
-
- IF @@ERROR <> 0 OR @retcode <> 0
- BEGIN
- CLOSE hCdropdistributor
- DEALLOCATE hCdropdistributor
- RETURN (1)
- END
- FETCH hCdropdistributor INTO @name
- end
-
- CLOSE hCdropdistributor
- DEALLOCATE hCdropdistributor
-
- -- Clean up distribution dbs
- DECLARE hCdropdistributor CURSOR LOCAL FAST_FORWARD FOR
- SELECT name FROM msdb..MSdistributiondbs
- FOR READ ONLY
-
- OPEN hCdropdistributor
- FETCH hCdropdistributor INTO @name
-
- WHILE (@@fetch_status <> -1)
- BEGIN
- exec @retcode = dbo.sp_dropdistributiondb
- @database = @name
-
- IF @@ERROR <> 0 OR @retcode <> 0
- BEGIN
- CLOSE hCdropdistributor
- DEALLOCATE hCdropdistributor
- RETURN (1)
- END
- FETCH hCdropdistributor INTO @name
- end
-
- CLOSE hCdropdistributor
- DEALLOCATE hCdropdistributor
- end
- end
-
- -- If everything should be cleaned up when we reach here with @no_checks = 1
- /*
- ** If local distributor, check if there are any distributor databases
- */
- IF UPPER(@distributor) = UPPER(@@SERVERNAME)
- BEGIN
- IF EXISTS (SELECT * FROM msdb..MSdistributiondbs)
- BEGIN
- RAISERROR (14121, 16, -1, @distributor)
- RETURN(1)
- END
- END
- ELSE
- begin
- -- Check to see if there are database published.
- if exists (SELECT * FROM master..sysdatabases
- WHERE (category & @transpublishdb_bit) <> 0 or
- (category & @mergepublishdb_bit) <> 0)
- begin
- raiserror(21045, 16, -1)
- return(1)
- end
-
- -- Check to see if there are subscribers defined.
- if exists (SELECT *
- FROM master..sysservers
- WHERE srvstatus & 4 <> 0)
- begin
- raiserror(21008, 16, -1)
- return(1)
- end
- end
-
-
- /*
- ** if @ignore_distributor = 1, we are in bruteforce cleanup mode, don't do RPC.
- */
- if @ignore_distributor = 0
- begin
- /*
- ** Get distribution server information
- */
- EXEC @retcode = dbo.sp_helpdistributor @publisher = @@SERVERNAME,
- @distribdb = @distribdb OUTPUT
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
-
- IF @distribdb is NOT NULL
- BEGIN
- /*
- ** Deactivate the dist publisher at the distributor
- ** Only do this if @distribdb is NOT NULL, which means the dist publisher
- ** if defined.
- */
- SELECT @proc = RTRIM(@dist_rpcname) + '.master.dbo.sp_changedistpublisher'
- EXECUTE @retcode = @proc @@SERVERNAME, 'active','false'
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RETURN (1)
- END
- END
- end
-
-
- /*
- ** Clear the server option to indicate that this is a distributor.
- */
- EXECUTE @retcode = dbo.sp_serveroption @dist_rpcname, 'dist', false
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RETURN(1)
- END
-
- -- Prevent dropping local server entry accidentally if user
- -- set 'dist' server option on local server.
- if UPPER(@dist_rpcname) <> UPPER(@@servername)
- begin
- exec @retcode = dbo.sp_dropserver @dist_rpcname, 'droplogins'
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RETURN(1)
- END
- end
-
-
- -- Drop table after unmark distributor to prevent
- -- sp_helpdist* failures.
-
- /* If local, Drop replication category and alerts */
- IF UPPER(@distributor) = UPPER(@@SERVERNAME)
- BEGIN
-
- -- Attempts to drop distributor_login, no big deal if it's still in use and we can't drop, don't quit here.
-
- declare @distributor_login sysname
- select @distributor_login = 'distributor_admin'
-
- if exists (select * from master..syslogins where loginname = @distributor_login collate database_default)
- begin
- EXEC @retcode = dbo.sp_droplogin @loginame = @distributor_login
- end
-
- -- Drop Distributor Alerts and Jobs
- exec @retcode = dbo.sp_MSdrop_distributor_alerts_and_responses
- IF @@ERROR <> 0 or @retcode <> 0
- BEGIN
- return (1)
- END
-
- -- Drop the two system tables.
- if exists (select * from msdb..sysobjects where name = 'MSdistpublishers'
- and xtype = 'U')
- drop table msdb..MSdistpublishers
-
- if @@error <> 0
- return 1 ;
-
- if exists (select * from msdb..sysobjects where name = 'MSdistributiondbs'
- and xtype = 'U')
- drop table msdb..MSdistributiondbs
-
- if @@error <> 0
- return 1 ;
-
- if exists (select * from msdb..sysobjects where name = 'MSdistributor'
- and xtype = 'U')
- drop table msdb..MSdistributor
-
- if @@error <> 0
- return 1 ;
-
- if exists (select * from msdb..sysobjects where name = 'sysreplicationalerts'
- and xtype = 'U')
- drop table msdb..sysreplicationalerts
-
- if @@error <> 0
- return 1 ;
-
-
- if exists (select * from msdb..sysobjects where name = 'MSagent_profiles'
- and xtype = 'U')
- drop table msdb..MSagent_profiles
-
- if @@error <> 0
- return 1 ;
-
-
- if exists (select * from msdb..sysobjects where name = 'MSagent_parameters'
- and xtype = 'U')
- drop table msdb..MSagent_parameters
-
- if @@error <> 0
- return 1 ;
-
- END
-
- -- Nnregister sp_MSrepl_startup as a startup stored procedure
- exec @retcode = dbo.sp_procoption 'sp_MSrepl_startup', 'startup', 'false'
- if @@error <> 0 or @retcode <> 0
- return 1
-
- RETURN (0)
- GO
-
- dump tran master with NO_LOG
- go
-
- raiserror('Creating procedure sp_helpdistributiondb', 0,1)
- go
-
- CREATE PROCEDURE sp_helpdistributiondb (
- @database sysname = '%'
- ) AS
-
- SET NOCOUNT ON
-
- declare @retcode int
- declare @cmd nvarchar(500)
-
- /*
- ** Check to make sure this is a distributor
- */
- IF NOT EXISTS (select * from master..sysservers
- where UPPER(datasource) = UPPER(@@SERVERNAME) collate database_default
- AND srvstatus & 8 <> 0)
- begin
- if @database <> '%'
- begin
- raiserror (14114, 16, -1, @@SERVERNAME)
- return(1)
- end
- else
- return(0)
- end
-
- IF NOT EXISTS (select * from msdb..sysobjects where name = 'MSdistributiondbs' and type = 'U')
- begin
- raiserror (14071, 16, -1)
- return(1)
- end
-
- /*
- ** Check if database is configured as a distributor database
- */
- IF @database <> '%' AND NOT EXISTS (select * from msdb..MSdistributiondbs where name = @database collate database_default)
- begin
- raiserror (14117, 16, -1, @database)
- return(1)
- end
-
- -- Begin from sp_helpdb
-
- /* Create temp table before any DMP to enure dynamic
- ** Since we examine the status bits in sysdatabase and turn them
- ** into english, we need a temporary table to build the descriptions.
- */
- create table #spdbdesc
- (
- dbid smallint null,
- dbdesc nvarchar(175) collate database_default null
- )
- if @@error<>0
- begin
- return(1)
- end
-
- /*
- ** Since we need to execute dynamic SQL to get the list of files, create a temp
- ** table to keep file descriptions
- */
- create table #spfiledesc
- (
- dbid smallint not null,
- fileid smallint not null,
- status int not null,
- size int not null,
- name sysname collate database_default not null,
- filename nvarchar(260) collate database_default not null
- )
- if @@error<>0
- begin
- return(1)
- end
-
- /*
- ** Initialize #spdbdesc from sysdatabases
- */
- insert into #spdbdesc (dbid)
- select dbid
- from master.dbo.sysdatabases d
- inner join msdb.dbo.MSdistributiondbs dist
- on dist.name = d.name collate database_default
- where dist.name like @database collate database_default
- and has_dbaccess(d.name) = 1
-
- declare @name sysname
-
- /*
- ** Insert the list of all files into #spfiledesc
- */
- declare c1 CURSOR LOCAL FAST_FORWARD FOR
- select db_name (dbid) from #spdbdesc
- open c1
- fetch c1 into @name
- while @@fetch_status >= 0
- begin
-
- /* Insert row for each database */
- select @cmd = ('insert into #spfiledesc
- select db_id (N'+ QUOTENAME(@name,'''') + '), fileid, status, size, RTRIM(name), RTRIM(filename) from'
- + ' ' + QUOTENAME(@name) + '.dbo.sysfiles')
- exec (@cmd)
- fetch c1 into @name
- end
- deallocate c1
-
- SELECT dist.name, min_distretention, max_distretention, history_retention,
- 'history_cleanup_agent' = formatmessage (20567, dist.name),
- 'distributor_cleanup_agent' = formatmessage(20568, dist.name),
- 'status'= 0,
-
- -- Refer to sp_helpdb for the following query.
- 'data_folder' = substring(v_data.filename, 1, len(v_data.filename) - charindex('\', reverse(v_data.filename))),
- 'data_file' = right(v_data.filename, charindex('\', reverse(v_data.filename))-1),
- 'data_file_size' = CONVERT(int, (select low from master.dbo.spt_values
- where type = 'E'
- and number = 1)
- * convert(dec(15), v_data.size)/ 1048576),
-
- 'log_folder' = substring(v_log.filename, 1, len(v_log.filename) - charindex('\', reverse(v_log.filename))),
- 'log_file' = right(v_log.filename, charindex('\', reverse(v_log.filename))-1),
- 'log_file_size' = CONVERT(int, (select low from master.dbo.spt_values
- where type = 'E'
- and number = 1)
- * convert(dec(15), v_log.size)/ 1048576)
-
- FROM msdb.dbo.MSdistributiondbs dist,
- master.dbo.sysdatabases d, #spfiledesc v_data,
- #spfiledesc v_log
- WHERE dist.name LIKE @database collate database_default
-
- and v_data.dbid = d.dbid
- and v_data.dbid > 0
- and v_data.status & 2 = 2
- and v_data.status & 0x40 = 0 -- data
- and v_data.fileid = (select min(v_data2.fileid) from #spfiledesc v_data2 where
- v_data2.dbid = d.dbid
- and v_data2.dbid > 0
- and v_data2.status & 2 = 2
- and v_data2.status & 0x40 = 0 ) -- data
-
-
- and v_log.dbid = d.dbid
- and v_log.dbid > 0
- and v_log.status & 2 = 2
- and v_log.status & 0x40 = 0x40 -- log
- and v_log.fileid = (select min(v_log2.fileid) from #spfiledesc v_log2 where
- v_log2.dbid = d.dbid
- and v_log2.dbid > 0
- and v_log2.status & 2 = 2
- and v_log2.status & 0x40 = 0x40 ) -- log
-
- and d.name = dist.name collate database_default
- GO
-
-
- dump tran master with no_log
- GO
-
- raiserror('Creating procedure sp_changedistributiondb', 0,1)
- go
-
- CREATE PROCEDURE sp_changedistributiondb (
- @database sysname,
- @property sysname = NULL, /* The property to change */
- @value nvarchar(255) = NULL /* The new property value */
- ) AS
-
- SET NOCOUNT ON
-
- /*
- ** Declarations.
- */
- DECLARE @distributor sysname
- DECLARE @min_distretention int
- DECLARE @max_distretention int
- DECLARE @retcode int
- DECLARE @new_min_distretention int
- DECLARE @new_max_distretention int
- DECLARE @new_history_retention int
- DECLARE @agentname nvarchar(100)
- DECLARE @command nvarchar(255)
- DECLARE @security_mode int
- DECLARE @distbit int
-
- SELECT @distbit = 16
-
- /*
- ** Parameter Check: @property.
- ** If the @property parameter is NULL, print the options.
- */
-
- IF @property IS NULL
- BEGIN
- CREATE TABLE #tab1 (properties sysname collate database_default not null)
- INSERT INTO #tab1 VALUES ('min_distretention')
- INSERT INTO #tab1 VALUES ('max_distretention')
- INSERT INTO #tab1 VALUES ('history_retention')
- SELECT * FROM #tab1
- RETURN (0)
- END
-
- /*
- ** Parameter Check: @property.
- ** Check to make sure that @property is a valid property in
- ** sysarticles.
- */
- IF @property IS NULL OR LOWER(@property collate SQL_Latin1_General_CP1_CS_AS) NOT IN
- ('min_distretention',
- 'max_distretention',
- 'history_retention')
-
- BEGIN
-
- RAISERROR (14115, 16, -1,
- '''min_distretention'', ''max_distretention'' or ''history_retention''')
- RETURN (1)
- END
-
-
- /*
- ** Check to make sure this is a distributor
- */
- IF NOT EXISTS (SELECT * FROM master..sysservers
- WHERE UPPER(datasource) = UPPER(@@SERVERNAME) collate database_default
- AND srvstatus & 8 <> 0)
- BEGIN
- RAISERROR (14114, 16, -1, @@SERVERNAME)
- RETURN(1)
- END
-
- /*
- ** Check if database is configured as a distributor database
- */
- IF NOT EXISTS (SELECT * FROM master..sysdatabases
- WHERE name = @database collate database_default
- AND category & @distbit <> 0)
- BEGIN
- RAISERROR (14117, 16, -1, @database)
- RETURN(1)
- END
-
- /*
- ** Change the property.
- */
- IF LOWER(@property collate SQL_Latin1_General_CP1_CS_AS) = 'min_distretention'
- BEGIN
- IF @value IS NULL
- BEGIN
- RAISERROR (14043, 16, -1, '@value')
- RETURN (1)
- END
-
- /*
- ** Set the MinDistRetention registry key value
- */
- SELECT @new_min_distretention = CONVERT(int, @value)
-
- /*
- ** Get MaxDistRetention value
- */
- SELECT @max_distretention = max_distretention FROM msdb..MSdistributiondbs
- WHERE name = @database collate database_default
-
- /*
- ** Check for invalid retention values
- */
- IF @new_min_distretention < 0
- BEGIN
- RAISERROR(14106, 16, -1)
- RETURN (1)
- END
- IF @new_min_distretention > @max_distretention
- BEGIN
- RAISERROR(14107, 16, -1)
- RETURN (1)
- END
-
- UPDATE msdb..MSdistributiondbs SET min_distretention = @new_min_distretention
- WHERE name = @database collate database_default
- IF @@error <> 0
- BEGIN
- RETURN (1)
- END
-
- /*
- ** Update Distribution Cleanup agent
- */
- select @agentname = name from msdb..sysjobs j, msdb..sysjobsteps s where
- j.job_id = s.job_id and
- j.category_id = 11 and
- s.database_name = @database collate database_default
-
- SELECT @command = 'EXEC dbo.sp_MSdistribution_cleanup @min_distretention = ' +
- CONVERT(nvarchar(12), @new_min_distretention) + ', @max_distretention = ' +
- CONVERT(nvarchar(12), @max_distretention)
- EXEC @retcode = msdb.dbo.sp_update_jobstep @job_name = @agentname, @step_id = 1,
- @command = @command
- IF @@error <> 0 OR @retcode <> 0
- RETURN(1)
-
- END
-
- IF LOWER(@property collate SQL_Latin1_General_CP1_CS_AS) = 'max_distretention'
- BEGIN
- IF @value IS NULL
- BEGIN
- RAISERROR (14043, 16, -1, '@value')
- RETURN (1)
- END
-
- /*
- ** Set the MaxDistRetention registry key value
- */
- SELECT @new_max_distretention = CONVERT(int, @value)
-
- /*
- ** Get MinDistRetention value
- */
- SELECT @min_distretention = min_distretention FROM msdb..MSdistributiondbs
- WHERE name = @database collate database_default
-
- /*
- ** Check for invalid retention values
- */
- IF @new_max_distretention < 0
- BEGIN
- RAISERROR(14106, 16, -1)
- RETURN (1)
- END
- IF @new_max_distretention < @min_distretention
- BEGIN
- RAISERROR(14107, 16, -1)
- RETURN (1)
- END
-
- UPDATE msdb..MSdistributiondbs SET max_distretention = @new_max_distretention
- WHERE name = @database collate database_default
- IF @@error <> 0
- BEGIN
- RETURN (1)
- END
- /*
- ** Update Distribution Cleanup agent
- */
- select @agentname = name from msdb..sysjobs j, msdb..sysjobsteps s where
- j.job_id = s.job_id and
- j.category_id = 11 and
- s.database_name = @database collate database_default
- SELECT @command = 'EXEC dbo.sp_MSdistribution_cleanup @min_distretention = ' +
- CONVERT(nvarchar(12), @min_distretention) + ', @max_distretention = ' +
- CONVERT(nvarchar(12), @new_max_distretention)
- EXEC @retcode = msdb.dbo.sp_update_jobstep @job_name = @agentname, @step_id = 1,
- @command = @command
- IF @@error <> 0 OR @retcode <> 0
- RETURN(1)
- END
-
- IF LOWER(@property collate SQL_Latin1_General_CP1_CS_AS) = 'history_retention'
- BEGIN
- IF @value IS NULL
- BEGIN
- RAISERROR (14043, 16, -1, '@value')
- RETURN (1)
- END
-
- /*
- ** Set the HistoryRetention registry key value
- */
- SELECT @new_history_retention = CONVERT(int, @value)
-
- UPDATE msdb..MSdistributiondbs SET history_retention = @new_history_retention
- WHERE name = @database collate database_default
- IF @@error <> 0
- BEGIN
- RETURN (1)
- END
-
- /*
- ** Update History Cleanup agent
- */
- select @agentname = name from msdb..sysjobs j, msdb..sysjobsteps s where
- j.job_id = s.job_id and
- j.category_id = 12 and
- s.database_name = @database collate database_default
- SELECT @command = 'EXEC dbo.sp_MShistory_cleanup @history_retention = ' +
- CONVERT(nvarchar(12), @new_history_retention)
- EXEC @retcode = msdb.dbo.sp_update_jobstep @job_name = @agentname, @step_id = 1,
- @command = @command
- IF @@error <> 0 OR @retcode <> 0
- RETURN(1)
-
- END
-
-
-
-
- /*
- ** Return succeed.
- */
- RAISERROR (14105, 10, -1, @property)
- RETURN (0)
- go
-
- raiserror('Creating procedure sp_dropdistributiondb', 0,1)
- go
-
- CREATE PROCEDURE sp_dropdistributiondb (
- @database sysname
-
- ) AS
-
- SET NOCOUNT ON
- /*
- ** Declarations.
- */
- DECLARE @retcode int
- DECLARE @agentname nvarchar(100)
- DECLARE @reg_key nvarchar(255)
- DECLARE @security_mode int
- DECLARE @distbit int
- DECLARE @distpublisher sysname
- DECLARE @distdb sysname
- DECLARE @device_name sysname
- DECLARE @command nvarchar(255)
-
- SELECT @distbit = 16
-
- /*
- ** Check to make sure this is a distributor
- */
- IF NOT EXISTS (SELECT * FROM master..sysservers
- WHERE UPPER(datasource) = UPPER(@@SERVERNAME) collate database_default
- AND srvstatus & 8 <> 0)
- BEGIN
- RAISERROR (14114, 16, -1, @@SERVERNAME)
- RETURN(1)
- END
-
- /*
- ** Check if database is configured as a distributor database
- */
- IF NOT EXISTS (SELECT * FROM msdb..MSdistributiondbs WHERE name = @database collate database_default)
- BEGIN
- RAISERROR (14117, 16, -1, @database)
- RETURN(1)
- END
-
- /*
- ** Check if any DistPublishers are using this database
- */
- IF EXISTS (SELECT * FROM msdb..MSdistpublishers WHERE
- distribution_db = @database collate database_default)
- BEGIN
- RAISERROR (14120, 16, -1, @database)
- RETURN (1)
- END
-
- /*
- ** Check if the DB is being currently used
- */
- IF EXISTS (SELECT * FROM master..sysprocesses WHERE
- dbid = DB_ID(@database))
- BEGIN
- RAISERROR (21122, 16, 1, @database)
- RETURN (1)
- END
-
-
- /*
- ** Drop the history cleanup agent.
- */
- -- Get agent name
- select @agentname = null
- select @agentname = name from msdb..sysjobs j, msdb..sysjobsteps s where
- j.job_id = s.job_id and
- j.category_id = 12 and
- s.database_name = @database collate database_default
-
- if @agentname is not null
- BEGIN
- EXEC @retcode = msdb.dbo.sp_delete_job
- @job_name = @agentname
- IF @@ERROR <> 0 or @retcode <> 0
- BEGIN
- RETURN(1)
- END
- END
-
- /*
- ** Drop the distribution cleanup agent.
- */
- select @agentname = null
- select @agentname = name from msdb..sysjobs j, msdb..sysjobsteps s where
- j.job_id = s.job_id and
- j.category_id = 11 and
- s.database_name = @database collate database_default
- if @agentname is not null
- BEGIN
- EXEC @retcode = msdb.dbo.sp_delete_job
- @job_name = @agentname
- IF @@ERROR <> 0 or @retcode <> 0
- BEGIN
- RETURN(1)
- END
- END
-
- /*
- ** Update sysdatabase category bit before dropping the database
- ** Otherwise, the database can not be dropped.
- **
- */
- UPDATE master..sysdatabases SET category = category & ~@distbit WHERE name = @database collate database_default
- IF @@ERROR <> 0
- BEGIN
- RETURN (1)
- END
-
-
- -- Drop the distributor db if it exists
- IF EXISTS (SELECT * FROM master..sysdatabases WHERE name = @database collate database_default)
- BEGIN
-
- CREATE TABLE #db_existed
- (
- db_existed bit NOT NULL
- )
-
- /* Get version stamp */
- SELECT @command = 'INSERT INTO #db_existed SELECT db_existed FROM ' +
- QUOTENAME(@database) + '..MSrepl_version'
-
- EXEC(@command)
- IF @@ERROR <> 0
- BEGIN
- RETURN(1)
- END
-
- -- Drop the distribution db only if it is created in sp_adddistributiondb.
- IF NOT EXISTS (SELECT * FROM #db_existed where db_existed = 0x1)
- BEGIN
-
- -- we're dropping the database, so don't bother to clean up
- -- individual records. Just make sure we blow away the synchronization
- -- files & directories hosted by the file system.
-
- SELECT @command = QUOTENAME(@database) + '.dbo.sp_MSdrop_snapshot_dirs'
- SELECT @command = 'EXEC ' + @command
- EXEC (@command)
- IF (@@ERROR <> 0)
- BEGIN
- RETURN (1)
- END
-
- /* Save the device info before dropping the database */
- CREATE TABLE #distdbdevices (name sysname collate database_default not null)
-
- /* Drop distributor devices */
- /* Query is copied from sp_helpdb */
- SELECT @command =
- 'INSERT INTO #distdbdevices select DISTINCT name from ' + QUOTENAME(@database) + '.dbo.sysfiles'
- EXEC (@command)
- IF @@ERROR <>0
- BEGIN
- RETURN(1)
- END
-
- /*
- ** Drop the distribution database
- */
- SELECT @command = 'drop database ' + QUOTENAME(@database)
- EXEC (@command)
- IF @@ERROR <> 0
- BEGIN
- /* Mark the database as distribution database again
- ** Otherwise, this sp will fail when it is reentered.
- ** It is often the case that if there's an open session
- ** on the database, it can not be dropped.
- */
- RETURN(1)
- END
-
- /* Drop distributor devices */
- /* Query is copied from sp_helpdb */
- /* SQL SERVER 7.0 may drop some auto generated device files, drop drop them here
- again
- */
- DECLARE hCdropdistributiondb CURSOR LOCAL FAST_FORWARD FOR
- SELECT DISTINCT dd.name FROM #distdbdevices dd, master.dbo.sysdevices ss
- WHERE ss.name = dd.name collate database_default
- FOR READ ONLY
-
- OPEN hCdropdistributiondb
- FETCH hCdropdistributiondb INTO @device_name
-
- WHILE (@@fetch_status <> -1)
- BEGIN
- /*
- ** Device may be used by other databases
- ** Ignore all errors
- */
- EXEC dbo.sp_dropdevice @device_name, DELFILE
- FETCH hCdropdistributiondb INTO @device_name
- END
-
- CLOSE hCdropdistributiondb
- DEALLOCATE hCdropdistributiondb
-
- END
- -- else, database did exist before it was made the distributor,
- -- do full cleanup
- ELSE
- BEGIN
-
- -- run 'fast clean' routine first. this removes repldata files
- -- and truncates MSrepl_transactions/commands
-
- SELECT @command = QUOTENAME(@database) + '.dbo.sp_MSfast_delete_trans'
- SELECT @command = 'EXEC ' + @command
- EXEC (@command)
- IF (@@ERROR <> 0)
- BEGIN
- RETURN (1)
- END
-
- -- Do distribution cleanup the final time
- -- this handles those fiddly agent tables & such
- -- ( and would delete commands/xacts if we hadn't already purged 'em )
-
- SELECT @command = QUOTENAME(@database) +
- '.dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = 0'
- SELECT @command = 'EXEC ' + @command
- EXEC (@command)
- IF (@@ERROR <> 0)
- BEGIN
- RETURN (1)
- END
- END
- END
-
-
- /*
- ** Delete the DistributionDB entry
- */
-
- DELETE msdb.dbo.MSdistributiondbs where name = @database collate database_default
- IF @@error <> 0
- BEGIN
- RETURN(1)
- END
-
-
- RETURN (0)
-
- GO
-
- dump tran master with no_log
- GO
- raiserror('Creating procedure sp_adddistributiondb', 0,1)
- go
-
- CREATE PROCEDURE sp_adddistributiondb (
- @database sysname,
- @data_folder nvarchar(255) = NULL,
- @data_file nvarchar(255) = NULL, /* physical file name */
- @data_file_size int = 2, /* Default: 2MB */
- @log_folder nvarchar(255) = NULL,
- @log_file nvarchar(255) = NULL, /* physical file name */
- @log_file_size int = 0,
- @min_distretention int = 0, /* min distribution retention period in hours */
- @max_distretention int = 72, /* max distribution retention period in hours */
- @history_retention int = 48, /* history retention period in hours */
- @security_mode int = 0, /* distributor login security 0 standard 1 integrated */
- @login sysname = 'sa', /* standard login name */
- @password sysname = NULL, /* standard login password */
- @createmode int = 0, /* 0: use create db for attach (recommended),
- 1: create db or use existing but no attach (this is the old way),
- 2: create for instdist and detach only */
- @from_scripting bit = 0
- ) AS
-
- SET NOCOUNT ON
-
- /*
- ** Declarations.
- */
- DECLARE @data_path nvarchar(512)
- DECLARE @log_path nvarchar(512)
-
- DECLARE @data_path_quoted_for_copy nvarchar(512)
- DECLARE @log_path_quoted_for_copy nvarchar(512)
-
- DECLARE @logical_data_file nvarchar(255)
- DECLARE @logical_log_file nvarchar(255)
- DECLARE @canneddbdata_file nvarchar(255)
- DECLARE @canneddblog_file nvarchar(255)
- DECLARE @filecopy_cmd nvarchar(255)
- DECLARE @file_exists bit
- DECLARE @data_file_preexists int
- DECLARE @log_file_preexists int
- DECLARE @osql_path nvarchar(260)
- DECLARE @osql_cmd nvarchar(1000)
- DECLARE @osql_for_nt int
- DECLARE @devnum int
- --DECLARE @num_pages int
- DECLARE @retcode int
- DECLARE @reg_key nvarchar(255)
- DECLARE @agentname nvarchar(100)
- DECLARE @command nvarchar (2048)
- DECLARE @distbit int
- DECLARE @install_path nvarchar(255)
- DECLARE @mssql_data_path nvarchar(255)
- DECLARE @on_clause nvarchar(512)
- DECLARE @logon_clause nvarchar(512)
- DECLARE @distproc nvarchar(255)
- DECLARE @major_version int
- DECLARE @db_exists bit
- DECLARE @trunc_log_bit int
- DECLARE @description nvarchar(100)
- DECLARE @category_name sysname
- DECLARE @createmode_attach int
- DECLARE @createmode_noattach int
- DECLARE @createmode_fordetach int
-
- --DECLARE @filegrowth nvarchar(10)
- DECLARE @data_file_size_str nvarchar(10)
- DECLARE @log_file_size_str nvarchar(10)
- DECLARE @platform_nt binary
-
- --DECLARE @max_datafile_size int
- --DECLARE @max_logfile_size int
-
- IF @password = N''
- select @password = NULL
-
- select @platform_nt = 0x1
- --select @filegrowth = N'512KB'
-
- -- on error, delete the data and log files only if they didn't pre-exist.
- -- by default, assume they pre-exist.
- select @data_file_preexists = 1
- select @log_file_preexists = 1
- select @file_exists = 0
-
- if (@data_file_size IS NULL) or (@data_file_size = 0)
- select @data_file_size_str = N'512KB'
- else
- select @data_file_size_str = convert(nvarchar(10), @data_file_size)
-
- if (@log_file_size IS NULL) or (@log_file_size = 0)
- select @log_file_size_str = N'512KB'
- else
- select @log_file_size_str = convert(nvarchar(10), @log_file_size)
-
- --if (@data_file_size > 16)
- -- select @max_datafile_size = @data_file_size
- --else
- -- select @max_datafile_size = 16
-
- --if (@log_file_size > 16)
- -- select @max_logfile_size = @log_file_size
- --else
- -- select @max_logfile_size = 16
-
- select @createmode_attach = 0, @createmode_noattach = 1, @createmode_fordetach = 2
- SELECT @trunc_log_bit = 8
- SELECT @distbit = 16
-
- if (@createmode <> @createmode_fordetach)
- begin
-
- /*
- ** Check if replication components are installed on this server
- */
- exec @retcode = dbo.sp_MS_replication_installed
- if (@retcode <> 1)
- begin
- return (1)
- end
-
- /*
- ** Check for invalid security modes
- */
- IF @security_mode < 0 OR @security_mode > 1
- BEGIN
- RAISERROR(14109, 16, -1)
- RETURN (1)
- END
-
- IF ( ( @platform_nt != platform() & @platform_nt ) and @security_mode = 1)
- BEGIN
- RAISERROR(21038, 16, -1)
- RETURN (1)
- END
-
- /*
- ** Check for invalid retention values
- */
- IF @min_distretention < 0 OR @max_distretention < 0
- BEGIN
- RAISERROR(14106, 16, -1)
- RETURN (1)
- END
- IF @min_distretention > @max_distretention
- BEGIN
- RAISERROR(14107, 16, -1)
- RETURN (1)
- END
-
- /*
- ** Check to make sure this is a distributor
- */
- IF NOT EXISTS (SELECT * FROM master..sysservers
- WHERE UPPER(datasource) = UPPER(@@SERVERNAME) collate database_default
- AND srvstatus & 8 <> 0)
- BEGIN
- RAISERROR (14114, 16, -1, @@SERVERNAME)
- RETURN(1)
- END
-
- /*
- ** Check if database is already configured as a distributor database
- */
- IF EXISTS (SELECT * FROM msdb..MSdistributiondbs WHERE name = @database collate database_default)
- BEGIN
- RAISERROR (14119, 16, -1, @database)
- RETURN(1)
- END
- end
-
- /*
- ** Get path to osql client (TOOLS) directory
- */
- EXECUTE @retcode = master.dbo.sp_MSgettools_path @osql_path OUTPUT
- IF ( @retcode <> 0 ) or ( @@ERROR <> 0 ) or ( @osql_path is NULL ) or ( @osql_path = '' )
- BEGIN
- GOTO UNDO
- END
-
- /*
- ** Get path to version specific INSTALL directory
- */
- exec @retcode = master.dbo.sp_MSget_setup_paths
- @sql_path = @install_path output,
- @data_path = @mssql_data_path output
- IF @retcode <> 0 or @install_path is NULL or @install_path='' or @mssql_data_path = ''
- BEGIN
- GOTO UNDO
- END
-
- IF @data_folder IS NULL or @data_folder = ''
- select @data_folder = @mssql_data_path + '\DATA'
-
- IF @log_folder IS NULL or @log_folder = ''
- select @log_folder = @mssql_data_path + '\DATA'
-
- IF @data_file IS NULL
- SELECT @data_file = @database + '.MDF'
-
- IF @log_file IS NULL
- SELECT @log_file = @database + '.LDF'
-
- if substring(@data_folder, len(@data_folder), 1) = '\'
- select @data_folder = substring (@data_folder, 1, len(@data_folder) -1)
- if substring(@log_folder, len(@log_folder), 1) = '\'
- select @log_folder = substring (@log_folder, 1, len(@log_folder) -1)
-
- SELECT @data_path = @data_folder + '\' + @data_file
- SELECT @log_path = @log_folder + '\' + @log_file
-
- SELECT @data_path_quoted_for_copy = '"' + @data_folder + '\' + @data_file + '"'
- SELECT @log_path_quoted_for_copy = '"' + @log_folder + '\' + @log_file + '"'
-
- select @logical_data_file = @database
-
- /*
- ** Truncate the logical log file name back to 128 characters
- ** long so the 'CREATE DATABASE' statement won't complain.
- */
- /* LEN(@logical_log_file) = LEN(@database) + LEN('_log') and
- LEN(@logical_log_file) <= 128 implies
- LEN(@database) <=124 */
- IF (LEN(@database) > 124)
- SELECT @logical_log_file = SUBSTRING(@database, 1, 124) + '_log'
- ELSE
- SELECT @logical_log_file = @database + '_log'
-
- if (@createmode = @createmode_attach)
- begin
- select @canneddbdata_file = @mssql_data_path + '\DATA\DISTMDL.MDF'
- select @canneddblog_file = @mssql_data_path + '\DATA\DISTMDL.LDF'
-
- exec dbo.sp_MSget_file_existence @canneddbdata_file, @file_exists OUTPUT
- if (@file_exists = 0)
- begin
- /* Fallback to mode where instdist.sql needs to be run */
- select @createmode = @createmode_noattach
- end
-
- exec dbo.sp_MSget_file_existence @canneddblog_file, @file_exists OUTPUT
- if (@file_exists = 0)
- begin
- /* Fallback to mode where instdist.sql needs to be run */
- select @createmode = @createmode_noattach
- end
- end
-
- /*
- ** Create the distributor database if it does not exist
- */
- IF NOT EXISTS (SELECT * from master..sysdatabases WHERE name = @database collate database_default) AND (@createmode <> @createmode_attach)
- BEGIN
-
- -- Note: Use system's default file growth.
- IF @logical_data_file IS NOT NULL AND NOT EXISTS (SELECT * FROM master..sysdevices WHERE name = @logical_data_file collate database_default)
- BEGIN
- SELECT @on_clause = ' ON (NAME =''' + @logical_data_file + ''',FILENAME=''' + REPLACE( @data_path, '''', '''''' ) +
- ''', SIZE=' + @data_file_size_str + ', MAXSIZE = UNLIMITED)'
- END
-
- IF @logical_log_file IS NOT NULL AND NOT EXISTS (SELECT * FROM master..sysdevices WHERE name = @logical_log_file collate database_default)
- BEGIN
- SELECT @logon_clause = ' LOG ON (NAME =''' + @logical_log_file + ''',FILENAME=''' + REPLACE( @log_path, '''', '''''' ) +
- ''', SIZE=' + @log_file_size_str + ', MAXSIZE= UNLIMITED)'
- END
-
- /*
- ** Create distributor database
- */
- SELECT @command = 'USE master CREATE DATABASE ' + QUOTENAME(@database) +
- + isnull(@on_clause, ' ') + isnull(@logon_clause, ' ')
-
- EXEC (@command)
- IF @@ERROR <> 0
- RETURN (1)
- SELECT @db_exists = 0
- END
- ELSE IF NOT EXISTS (SELECT * from master..sysdatabases WHERE name = @database collate database_default) AND (@createmode = @createmode_attach)
- BEGIN
- /* DO THE CREATE DATABASE FOR ATTACH STUFF */
-
- exec dbo.sp_MSget_file_existence @data_path, @data_file_preexists OUTPUT
- if (@data_file_preexists = 1)
- begin
- raiserror(5170, 16, -1, @data_path)
- return 1
- end
-
- SELECT @on_clause = ' ON (NAME = ''' + @logical_data_file + ''', FILENAME=''' + REPLACE( @data_path, '''', '''''' ) + ''')'
-
- exec dbo.sp_MSget_file_existence @log_path, @log_file_preexists OUTPUT
- if (@log_file_preexists = 1)
- begin
- raiserror(5170, 16, -1, @log_path)
- return 1
- end
-
- SELECT @logon_clause = ' LOG ON (NAME = ''' + @logical_log_file + ''', FILENAME=''' + REPLACE( @log_path, '''', '''''' ) + ''')'
-
- select @filecopy_cmd = 'copy "' + @canneddbdata_file + '" ' + @data_path_quoted_for_copy
- EXEC @retcode = master..xp_cmdshell @filecopy_cmd, NO_OUTPUT
- IF @retcode <> 0 OR @@ERROR <> 0
- BEGIN
- RAISERROR (14113, 16, -1, @filecopy_cmd, 'instdist.out')
- return (1)
- END
-
- select @filecopy_cmd = 'copy "' + @canneddblog_file + '" ' + @log_path_quoted_for_copy
- EXEC @retcode = master..xp_cmdshell @filecopy_cmd, NO_OUTPUT
- IF @retcode <> 0 OR @@ERROR <> 0
- BEGIN
- RAISERROR (14113, 16, -1, @filecopy_cmd, 'instdist.out')
- return (1)
- END
-
- /*
- ** Create distributor database
- */
- SELECT @command = 'USE master CREATE DATABASE ' + QUOTENAME(@database) +
- + @on_clause + @logon_clause + ' FOR ATTACH'
-
- EXEC (@command)
- IF @@ERROR <> 0
- begin
- RETURN (1)
- end
- dbcc dbreindexall(@database, 240) with no_infomsgs
-
- SELECT @db_exists = 0
- END
- ELSE
- BEGIN
- SELECT @db_exists = 1
- END
-
- -- Must make the dist db owned by sa so that the sps in it can select from
- -- security cache tables in tempdb by owership chain rule.
- declare @retcode2 int
- select @retcode2 = 0
- select @distproc = QUOTENAME(@database) + '.dbo.sp_executesql'
- SELECT @command =
- -- If the db is created by sa or from attach, sa is dbo already.
- -- sp_changedbowner will fail is the new owner is an user in the db already.
- ' if not exists (select * from sysusers where sid = 0x01) ' +
- ' exec @retcode2 = dbo.sp_changedbowner ''sa'''
- EXEC @retcode = @distproc @command, N'@retcode2 int output', @retcode2 output
- IF @retcode <> 0 or @retcode2 <> 0 or @@ERROR <> 0
- BEGIN
- GOTO UNDO
- END
-
- /* Set the database option truncate log on checkpoint & turn off autoclose which is default of win9x*/
- IF EXISTS (SELECT * FROM master.dbo.sysdatabases WHERE
- name = @database collate database_default AND
- (status & @trunc_log_bit) = 0 ) -- if its not already marked
- BEGIN
- EXEC @retcode = dbo.sp_dboption @database, 'trunc. log on chkpt.', 'true'
- IF @retcode <> 0 OR @@ERROR <> 0
- BEGIN
- GOTO UNDO
- END
- END
-
- EXEC @retcode = dbo.sp_dboption @database, 'autoclose', 'false'
- IF @retcode <> 0 OR @@ERROR <> 0
- BEGIN
- GOTO UNDO
- END
-
- /*
- **
- ** Update sysdatabase category bit
- ** This is to prevent user from dropping the database.
- **/
- if (@createmode <> @createmode_fordetach)
- begin
- UPDATE master..sysdatabases SET category = category | @distbit WHERE name = @database collate database_default
- IF @@ERROR <> 0
- BEGIN
- GOTO UNDO
- END
- end
-
- /*
- ** Install instdist.sql
- */
-
- if (@createmode <> @createmode_attach) OR (@db_exists = 1)
- begin
- if (( platform() & @platform_nt = @platform_nt ))
- select @osql_for_nt = 1
- else
- select @osql_for_nt = 0
-
- -- Always use integrated security on WINNT since @login passed-in is for remote
- -- subscriber and may not have enough privilege to apply the script
- IF (@security_mode = 1 or @osql_for_nt = 1) AND NOT (@security_mode = 0 AND @createmode = 2)
- BEGIN
- SELECT @osql_cmd = '" "' + @osql_path + '\binn\osql" -E '
- if serverproperty('instancename') is not null
- SELECT @osql_cmd = @osql_cmd + ' -S"' + @@SERVERNAME + '" '
- END
- ELSE
- BEGIN
- -- cannot specify -S w/ -E for local execution, SID does not map
- if (@osql_for_nt = 1)
- SELECT @osql_cmd = '" "' + @osql_path + '\binn\osql" -U"' + @login + '" -P"' +
- isnull(@password,'') + '" -S"' + @@SERVERNAME + '" '
- else
- SELECT @osql_cmd = '"' + @osql_path + '\binn\osql" -U"' + @login + '" -P"' +
- isnull(@password,'') + '" -S"' + @@SERVERNAME + '" '
- END
-
- select @osql_cmd = @osql_cmd + '-l60 -t60 '
-
- -- We must use -b option to make osql return error code !!
- SELECT @osql_cmd = @osql_cmd +
- ' -d"' + @database + '" -b ' +
- ' -i' + '"' + @install_path + '\install\instdist.sql"' +
- ' -o' + '"' + @install_path + '\install\instdist.out"'
-
- if (@osql_for_nt = 1)
- BEGIN
- SELECT @osql_cmd = @osql_cmd + ' "'
- END
-
- EXEC @retcode = master..xp_cmdshell @osql_cmd
- IF @retcode <> 0 OR @@ERROR <> 0
- BEGIN
- RAISERROR (14113, 16, -1, @osql_cmd, 'instdist.out')
- GOTO UNDO
- END
- end
-
- if (@createmode <> @createmode_fordetach)
- begin
- /* Set db_existed bit in MSrepl_version */
- IF @db_exists = 1
- BEGIN
- SELECT @distproc = 'UPDATE ' +
- @database + '..MSrepl_version SET db_existed = 0x1'
-
- EXEC(@distproc)
- IF @@ERROR <> 0
- BEGIN
- GOTO UNDO
- END
- END
-
- DELETE msdb.dbo.MSdistributiondbs WHERE name = @database collate database_default
- IF @@ERROR <> 0
- BEGIN
- GOTO UNDO
- END
-
- INSERT INTO msdb.dbo.MSdistributiondbs VALUES (
- @database, @min_distretention, @max_distretention, @history_retention
- )
- IF @@ERROR <> 0
- BEGIN
- GOTO UNDO
- END
-
- -- This login need db_owner priviledge to call sps in distribution db
- declare @distributor_login sysname
- select @distributor_login = 'distributor_admin'
-
- select @command = quotename(@database) + '.dbo.sp_MSrepl_dbrole'
- exec @retcode = @command 'db_owner', @distributor_login, 'add'
- IF @@error <> 0 OR @retcode <> 0
- GOTO UNDO
-
- if @from_scripting = 0
- begin
- /*
- ** Create the history cleanup agent.
- */
- SELECT @agentname = formatmessage (20567, @database)
- SELECT @command = 'EXEC dbo.sp_MShistory_cleanup @history_retention = ' +
- CONVERT(nvarchar(12), @history_retention)
-
- IF EXISTS (SELECT * FROM msdb..sysjobs_view WHERE name = @agentname collate database_default and
- UPPER(originating_server) = UPPER(CONVERT(sysname, SERVERPROPERTY('ServerName'))))
- BEGIN
- EXEC @retcode = msdb.dbo.sp_delete_job
- @job_name = @agentname
- IF @@ERROR <> 0 or @retcode <> 0
- BEGIN
- GOTO UNDO
- END
- END
-
- set @description = formatmessage(20535)
-
- -- Get History Cleanup category name (assumes category_id = 12)
- select @category_name = name FROM msdb.dbo.syscategories where category_id = 12
-
- EXECUTE @retcode = dbo.sp_MSadd_repl_job @agentname,
- @subsystem = 'TSQL',
- @server = @@SERVERNAME,
- @databasename = @database,
- @description = @description,
- @freqtype = 4,
- @freqsubtype = 4,
- @freqsubinterval = 10, /* Number of minutes between runs */
- @command = @command,
- @enabled = 1,
- @retryattempts = 0,
- @loghistcompletionlevel = 0,
- @category_name = @category_name
-
- IF @@ERROR <> 0 or @retcode <> 0
- BEGIN
- GOTO UNDO
- END
-
- /*
- ** Create the distribution cleanup agent.
- */
- SELECT @agentname = formatmessage (20568, @database)
- SELECT @command = 'EXEC dbo.sp_MSdistribution_cleanup @min_distretention = ' +
- CONVERT(nvarchar(12), @min_distretention) + ', @max_distretention = ' +
- CONVERT(nvarchar(12), @max_distretention)
-
- IF EXISTS (SELECT * FROM msdb..sysjobs_view WHERE name = @agentname collate database_default and
- UPPER(originating_server) = UPPER(CONVERT(sysname, SERVERPROPERTY('ServerName'))))
- BEGIN
- EXEC @retcode = msdb.dbo.sp_delete_job
- @job_name = @agentname
- IF @@ERROR <> 0 or @retcode <> 0
- BEGIN
- GOTO UNDO
- END
- END
-
- set @description = formatmessage(20541)
- -- Get Distribution Cleanup category name (assumes category_id = 11)
- select @category_name = name FROM msdb.dbo.syscategories where category_id = 11
-
- EXECUTE @retcode = msdb.dbo.sp_MSadd_repl_job @agentname,
- @subsystem = 'TSQL',
- @server = @@SERVERNAME,
- @databasename = @database,
- @description = @description,
- @freqtype = 4,
- @freqsubtype = 4,
- @freqsubinterval = 10, /* Number of minutes between runs */
- @command = @command,
- @retryattempts = 0,
- @enabled = 0,
- @loghistcompletionlevel = 0,
- @category_name = @category_name,
- -- Start and end time is 5 min off from the history cleanup, which use the default.
- @activestarttimeofday = 000500,
- @activeendtimeofday = 000459
-
- IF @@ERROR <> 0 or @retcode <> 0
- BEGIN
- GOTO UNDO
- end
- end
- end
- else
- begin
- /*detach */
- dbcc detachdb(@database)
- end
-
- RETURN(0)
-
- UNDO:
-
- IF @db_exists = 0
- EXECUTE dbo.sp_dropdistributiondb @database
-
- /* Need to do it since sp_dropdistributiondb will fail in some cases */
- UPDATE master..sysdatabases SET category = category & ~@distbit WHERE name = @database collate database_default
-
- DELETE msdb.dbo.MSdistributiondbs where name = @database collate database_default
-
- /* drop the database and ignore error */
- IF @db_exists = 0 AND
- EXISTS (SELECT * from master..sysdatabases WHERE name = @database collate database_default)
- BEGIN
- SELECT @command = 'USE master DROP DATABASE ' + QUOTENAME(@database)
- EXEC (@command)
- END
-
- if (@createmode = @createmode_attach)
- begin
- if (@data_file_preexists = 0)
- begin
- select @command = 'del ' + @data_path_quoted_for_copy
- exec master..xp_cmdshell @command
- --ignore errors
- end
- if (@log_file_preexists = 0)
- begin
- select @command = 'del ' + @log_path_quoted_for_copy
- exec master..xp_cmdshell @command
- --ignore errors
- end
- end
-
- RETURN(1)
- GO
-
- dump tran master with no_log
- GO
-
- raiserror('Creating procedure sp_dropdistpublisher', 0,1)
- go
-
- CREATE PROCEDURE sp_dropdistpublisher (
- @publisher sysname, /* publisher server name */
- @no_checks bit = 0
- ) AS
-
- SET NOCOUNT ON
-
- DECLARE @distributor sysname
- DECLARE @distaccount nvarchar(127)
- DECLARE @proc nvarchar (255)
- DECLARE @retcode int
- DECLARE @privilege sysname
- DECLARE @reg_key nvarchar(255)
- DECLARE @return_status int
- DECLARE @foundSubscriber int
- DECLARE @distribdb sysname
- DECLARE @command nvarchar(255)
- DECLARE @active_value int
- DECLARE @publish_bit int
- DECLARE @mergepub_bit int
-
-
- SELECT @return_status = 0
- SELECT @foundSubscriber = 0
-
- SELECT @publish_bit = 1
- SELECT @mergepub_bit = 4
-
- /*
- ** Parameter Check: @publisher.
- ** Check to make sure that the publisher exists, that the name isn't
- ** NULL, and that the name conforms to the rules for identifiers.
- */
-
- IF @publisher IS NULL
- BEGIN
- RAISERROR (14043, 16, -1, '@publisher')
- RETURN (1)
- END
-
- EXECUTE @retcode = dbo.sp_validname @publisher
-
- IF @retcode <> 0
- RETURN (1)
-
- /*
- ** Get distribution server information for remote RPC
- ** agent verification.
- */
- EXEC @retcode = dbo.sp_helpdistributor @publisher = @publisher,
- @distributor = @distributor OUTPUT,
- @distribdb = @distribdb OUTPUT
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
-
- /*
- ** Only a local distributor can be modified.
- */
- IF UPPER(@distributor) <> UPPER(@@SERVERNAME)
- BEGIN
- RAISERROR (14114, 16, -1, @@SERVERNAME)
- RETURN (1)
- END
-
- IF NOT EXISTS (SELECT *
- FROM msdb..MSdistpublishers
- WHERE UPPER(name) = UPPER(@publisher) collate database_default)
- BEGIN
- RAISERROR (14080, 11, -1)
- RETURN (1)
- END
-
-
- IF UPPER(@publisher) = UPPER(@@SERVERNAME)
- BEGIN
- /*
- ** If @publisher is local,
- ** 1. check to make sure there is no subscriber
- ** for the publisher in the distribution database
- ** 2. check to make sure there are not database enabled for replication
- */
- -- Check to see if there are subscribers defined.
- if exists (SELECT *
- FROM master..sysservers
- WHERE srvstatus & 4 <> 0)
- begin
- raiserror(21047, 16, -1)
- return(1)
- end
-
- IF EXISTS (SELECT * FROM master..sysdatabases WHERE
- (category & @publish_bit) <> 0 OR
- (category & @mergepub_bit) <> 0)
- BEGIN
- RAISERROR (21033, 16, -1, @@SERVERNAME)
- RETURN (1)
- END
- END
- ELSE
- BEGIN
- if @no_checks = 0
- begin
- /*
- ** If the publisher is remote, check the status of the distpublisher
- ** The status will be inactive if the remote publisher dropped the
- ** distributor.
- */
-
- IF EXISTS (SELECT * FROM msdb.dbo.MSdistpublishers WHERE
- UPPER(name) = UPPER(@publisher) collate database_default and active = 1)
- BEGIN
- RAISERROR (14098, 16, -1, @publisher, @@SERVERNAME)
- RETURN (1)
- END
- end
- else
- begin
- SELECT @command = @distribdb + '.dbo.sp_MSdistpublisher_cleanup'
- exec @retcode = @command @publisher
- if @retcode <> 0 or @@error <> 0
- return 1
- end
- END
-
- DELETE msdb..MSdistpublishers where UPPER(name) = UPPER(@publisher) collate database_default
- IF @@ERROR <> 0 RETURN (1)
-
-
- declare @fExists int
- exec @fExists = dbo.sp_MSIfExistsRemoteLogin @publisher, 'distributor_admin', 'sa'
- if (@fExists = 1)
- BEGIN
- EXECUTE @retcode = dbo.sp_dropremotelogin @publisher, 'distributor_admin', sa
- IF @@ERROR <> 0 OR @retcode <> 0 RETURN (1)
- END
-
- exec @fExists = dbo.sp_MSIfExistsRemoteLogin @publisher, 'distributor_admin',
- 'distributor_admin'
- if (@fExists = 1)
- BEGIN
- EXECUTE @retcode = dbo.sp_dropremotelogin @publisher, 'distributor_admin',
- 'distributor_admin'
- IF @@ERROR <> 0 OR @retcode <> 0 RETURN (1)
- END
-
- /* SECURITY ********************************
- IF EXISTS (SELECT * FROM master..sysremotelogins
- WHERE remoteserverid = (SELECT srvid FROM master..sysservers
- WHERE UPPER(srvname) = UPPER(@publisher) collate database_default)
- AND remoteusername = 'sa'
- AND suid = 1) --'sa'
- *********************************/
-
-
- /* SECURITY ********************************
- IF EXISTS (SELECT * FROM master..sysremotelogins
- WHERE remoteserverid = (SELECT srvid FROM master..sysservers
- WHERE UPPER(srvname) = UPPER(@publisher) collate databsae_default)
- AND remoteusername = 'probe'
- AND suid = 10) -- 'probe'
- exec @fExists = dbo.sp_MSIfExistsRemoteLogin @publisher, 'probe', 'probe'
- if (@fExists = 1)
- BEGIN
- EXECUTE @retcode = dbo.sp_remoteoption @publisher, probe, probe, trusted, false
- IF @@ERROR <> 0 OR @retcode <> 0 RETURN (1)
- END
- *********************************/
-
- return(@return_status)
- GO
-
- raiserror('Creating procedure sp_adddistpublisher', 0,1)
- go
-
- CREATE PROCEDURE sp_adddistpublisher (
- @publisher sysname, /* publisher server name */
- @distribution_db sysname,
- @security_mode int = NULL,
- @login sysname = 'sa',
- @password sysname = NULL,
- @working_directory nvarchar(255),
- @trusted nvarchar(5) = NULL,
- @encrypted_password bit = 0,
- @thirdparty_flag bit = 0
- ) AS
-
- SET NOCOUNT ON
-
- /*
- ** Declarations.
- */
-
- DECLARE @retcode int
- DECLARE @reg_key nvarchar(255)
- DECLARE @distbit int
- DECLARE @active_value int
- DECLARE @server_added bit
- DECLARE @proc nvarchar(255)
- declare @fExists int
- declare @command nvarchar(255)
- declare @trusted_id bit
- declare @platform_nt binary
- declare @qv_replication varchar(10)
- declare @qv_replication_unlimited integer
- declare @qv_value_replication integer
- declare @enc_password nvarchar(524)
-
- select @platform_nt = 0x1
- select @qv_replication = '2745196162', @qv_replication_unlimited = 0
-
- SELECT @distbit = 16
- SELECT @server_added = 0
-
- /*
- ** Check if replication components are installed on this server
- */
- exec @retcode = dbo.sp_MS_replication_installed
- if (@retcode <> 1)
- begin
- return (1)
- end
-
- IF @working_directory IS NULL or ltrim(rtrim(@working_directory)) = ' '
- BEGIN
- RAISERROR (14043, 16, -1, '@working_directory')
- return (1)
- END
-
-
- /*
- ** Parameter Check: @publisher.
- ** Check to make sure that the publisher is not NULL and that it
- ** conforms to the rules for identifiers.
- */
-
- IF @publisher IS NULL
- BEGIN
- RAISERROR (14043, 16, -1, '@publisher')
- return (1)
- END
-
- EXECUTE @retcode = dbo.sp_validname @publisher
-
- IF @@ERROR <> 0 OR @retcode <> 0
- return (1)
-
- IF @password = N''
- select @password = NULL
-
- /* On REPLICATION_LIMITED server, only local publisher is supported.
- * Note: The login and password registered for local publisher will be used for
- * local agents to login to distributor, thus local publisher has to be installed first.
- * We choose not to support remote dist publshers on REPLICATION_LIMITED server altogether.
- * On NT, local agents will always use integrated security to log into
- * distributor
- * Today, REPLICATION_LIMITED means desktop but we check specific sku entry just in case
- */
- exec @qv_value_replication = master.dbo.sp_MSinstance_qv @qv_replication
-
- if ( @qv_value_replication != @qv_replication_unlimited ) and ( UPPER(@publisher) <> UPPER(@@servername) )
- begin
- -- remote dist publisher is not supported on this server version
- raiserror(21041,16,-1)
- return (1)
- end
-
-
- -- Set default security
- IF @security_mode IS NULL
- BEGIN
- IF (UPPER(@publisher) = UPPER(@@SERVERNAME) and ( platform() & @platform_nt = @platform_nt ) )
- SELECT @security_mode = 1
- ELSE
- SELECT @security_mode = 0
- END
-
- /*
- ** Check for invalid security mode
- */
- IF @security_mode < 0 OR @security_mode > 1
- BEGIN
- RAISERROR(14109, 16, -1)
- return (1)
- END
-
- IF (UPPER(@publisher) = UPPER(@@SERVERNAME) and ( @platform_nt != platform() & @platform_nt ) and @security_mode = 1)
- BEGIN
- RAISERROR(21038, 16, -1)
- RETURN (1)
- END
-
- -- Encrypt the password
- select @enc_password = @password
- IF @encrypted_password = 0
- BEGIN
- EXEC @retcode = master.dbo.xp_repl_encrypt @enc_password OUTPUT
- IF @@error <> 0 OR @retcode <> 0
- return 1
- END
-
- -- Validate the working directory
- -- Remove heading and trailing spaces
- select @working_directory = RTRIM(LTRIM(@working_directory))
-
- -- if the last char is '\', remove it.
- if substring(@working_directory, len(@working_directory),1) = '\'
- select @working_directory = substring(@working_directory, 1,
- len(@working_directory)-1)
-
- -- Don't do validation if it is a UNC path due to security problem.
- -- If the server is started as a service using local system account, we
- -- don't have access to the UNC path.
- if substring(@working_directory, 1,2) <> '\\'
- begin
- select @command = 'dir "' + @working_directory + '"'
- exec @retcode = master..xp_cmdshell @command, 'no_output'
- if @@error <> 0
- return (1)
- if @retcode <> 0
- begin
- raiserror (21037, 16, -1, @working_directory)
- return (1)
- end
- end
-
- /*
- ** Parameter Check: @trusted
- */
-
- if @trusted is null
- begin
- if UPPER(@publisher) = UPPER(@@servername)
- select @trusted = 'false'
- else
- select @trusted = 'true'
- end
-
- IF LOWER(@trusted collate SQL_Latin1_General_CP1_CS_AS) NOT IN ('true', 'false')
- BEGIN
- RAISERROR (14148, 16, -1, '@trusted')
- RETURN (1)
- END
-
- IF LOWER(@trusted collate SQL_Latin1_General_CP1_CS_AS) = 'true' SELECT @trusted_id = 1
- ELSE SELECT @trusted_id = 0
-
- /*
- ** Check to make sure this is a distributor
- */
- IF NOT EXISTS (SELECT * FROM master..sysservers
- WHERE UPPER(datasource) = UPPER(@@SERVERNAME) collate database_default
- AND srvstatus & 8 <> 0)
- BEGIN
- RAISERROR (14114, 16, -1, @@SERVERNAME)
- return (1)
- END
-
- /*
- ** Check if database is configured as a distributor database
- */
- IF NOT EXISTS (SELECT * FROM msdb..MSdistributiondbs WHERE name = @distribution_db collate database_default)
- BEGIN
- RAISERROR (14117, 16, -1, @distribution_db)
- return (1)
- END
-
- /* Check if publisher is already defined. */
- IF EXISTS (SELECT *
- FROM msdb..MSdistpublishers
- WHERE UPPER(name) = UPPER(@publisher) collate database_default)
-
- BEGIN
- RAISERROR (14074, 16, -1, @publisher)
- RETURN (1)
- END
-
-
-
- IF NOT EXISTS (SELECT *
- FROM master..sysservers
- WHERE UPPER(srvname) = UPPER(@publisher) collate database_default)
-
- /* Add the server if it does not exist. */
- BEGIN
- EXECUTE @retcode = dbo.sp_addserver @publisher
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14075, 16, -1)
- GOTO UNDO
- END
- SELECT @server_added = 1
- END
- ELSE
- BEGIN
- SELECT @publisher = fn_getpersistedservernamecasevariation(@publisher) collate database_default
- END
-
- /*
- ** Set the Active value.
- ** If the @publisher is local, set it to true.
- ** Otherwise, set it to false
- */
- IF UPPER(@publisher) = UPPER(@@SERVERNAME)
- SELECT @active_value = 1
- ELSE
- SELECT @active_value = 0
-
-
- DELETE msdb.dbo.MSdistpublishers where UPPER(name) = UPPER(@publisher) collate database_default
- IF @@ERROR <> 0
- BEGIN
- GOTO UNDO
- END
-
- INSERT INTO msdb.dbo.MSdistpublishers VALUES (
- @publisher, @distribution_db, @working_directory,
- @security_mode, @login, @enc_password, @active_value, @trusted_id, @thirdparty_flag)
- IF @@ERROR <> 0
- BEGIN
- GOTO UNDO
- END
-
- -- Add distributor_admin to distribution_admin non trusted mapping
- exec @fExists = dbo.sp_MSIfExistsRemoteLogin @publisher, null,
- 'distributor_admin'
- if( @fExists = 0 )
- BEGIN
-
- EXECUTE @retcode = dbo.sp_addremotelogin @publisher, 'distributor_admin',
- 'distributor_admin'
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14075, 16, -1)
- GOTO UNDO
- END
- END
-
- -- For 6x publisher, we still need the trusted sa to sa.
- -- For 6x publisher upgrading to 7.0, distributor_admin to distributor_admin need to be trusted.
- -- add remotelogin of SA if it doesn't already exist
- -- If there's a mapping for remote login sa already, we cannot map it to distributor_admin
- -- this is the case of server upgraded from 6.5.
- exec @fExists = dbo.sp_MSIfExistsRemoteLogin @publisher, null, 'sa'
- if( @fExists = 0 )
- BEGIN
- EXECUTE @retcode = dbo.sp_addremotelogin @publisher, 'distributor_admin', 'sa'
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14075, 16, -1)
- GOTO UNDO
- END
- END
- if @trusted_id = 1
- begin
- exec @fExists = dbo.sp_MSIfExistsRemoteLogin @publisher, 'distributor_admin', 'sa'
- if( @fExists = 1 )
- BEGIN
- EXECUTE @retcode = dbo.sp_remoteoption @publisher, 'distributor_admin', 'sa', trusted, true
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14075, 16, -1)
- GOTO UNDO
- END
- END
-
- EXECUTE @retcode = dbo.sp_remoteoption @publisher, 'distributor_admin', 'distributor_admin', trusted, true
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14075, 16, -1)
- GOTO UNDO
- END
- END
-
-
- /* Add remotelogin enabling the 'probe' of the publisher to
- ** RPC for distribution counter information.
- */
- /* SECURITY ********************************
- IF NOT EXISTS (SELECT *
- FROM master..sysremotelogins srl,
- master..sysservers ss
- WHERE UPPER(ss.srvname) = UPPER(@publisher) collate database_default
- AND srl.remoteserverid = ss.srvid
- AND srl.remoteusername = 'probe'
- AND srl.suid = 10) -- 'probe'
- exec @fExists = dbo.sp_MSIfExistsRemoteLogin @publisher, 'probe', 'probe'
- if (@fExists = 0)
- BEGIN
- EXECUTE @retcode = dbo.sp_addremotelogin @publisher, 'probe', 'probe'
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14075, 16, -1)
- GOTO UNDO
- END
- END
- *********************************/
-
- RETURN(0)
-
- UNDO:
- -- If the server is marked, drop it
- IF EXISTS (SELECT *
- FROM msdb..MSdistpublishers
- WHERE UPPER(name) = UPPER(@publisher) collate database_default)
- EXEC dbo.sp_dropdistpublisher @publisher
-
- IF @server_added = 1
- EXEC dbo.sp_dropserver @publisher
-
- RETURN(1)
- GO
-
-
- raiserror('Creating procedure sp_changedistpublisher', 0,1)
- go
-
- CREATE PROCEDURE sp_changedistpublisher (
- @publisher sysname,
- @property sysname = NULL, /* The property to change */
- @value nvarchar(255) = NULL /* The new property value */
- ) AS
-
- SET NOCOUNT ON
-
- /*
- ** Declarations.
- */
- DECLARE @retcode int
- DECLARE @new_database sysname
- DECLARE @new_security_mode int
- DECLARE @new_login sysname
- DECLARE @new_password nvarchar(524)
- DECLARE @distbit int
- DECLARE @new_active int
- DECLARE @new_trusted bit
- DECLARE @command nvarchar(255)
- declare @distribdb sysname
- DECLARE @platform_nt binary
-
- SELECT @platform_nt = 0x1
- SELECT @distbit = 16
-
- /*
- ** Parameter Check: @property.
- ** If the @property parameter is NULL, print the options.
- */
-
- IF @property IS NULL
- BEGIN
- CREATE TABLE #tab1 (properties sysname collate database_default not null)
- INSERT INTO #tab1 VALUES ('distribution_db')
- INSERT INTO #tab1 VALUES ('working_directory')
- INSERT INTO #tab1 VALUES ('security_mode')
- INSERT INTO #tab1 VALUES ('login')
- INSERT INTO #tab1 VALUES ('password')
- INSERT INTO #tab1 VALUES ('active')
- INSERT INTO #tab1 VALUES ('trusted')
- SELECT * FROM #tab1
- RETURN (0)
- END
-
- /*
- ** Parameter Check: @property.
- ** Check to make sure that @property is a valid property in
- ** msdb.dbo.MSdistpublishers.
- */
- IF @property IS NULL OR LOWER(@property collate SQL_Latin1_General_CP1_CS_AS) NOT IN
- ('distribution_db',
- 'working_directory',
- 'security_mode',
- 'login',
- 'password',
- 'active',
- 'trusted')
- BEGIN
- RAISERROR (14115, 16, -1,
- '''distribution_db'', ''working_directory'', ''security_mode'', ''login'', ''password'', ''active'', or ''trusted''')
- RETURN (1)
- END
-
- /*
- ** Check to make sure this is a distributor
- */
- IF NOT EXISTS (SELECT * FROM master..sysservers
- WHERE UPPER(datasource) = UPPER(@@SERVERNAME) collate database_default
- AND srvstatus & 8 <> 0)
- BEGIN
- RAISERROR (14114, 16, -1, @@SERVERNAME)
- RETURN(1)
- END
-
- -- Get the distribution db name.
- select @distribdb = distribution_db from msdb..MSdistpublishers where
- UPPER(name) = UPPER(@publisher) collate database_default
-
- /*
- ** Change the property.
- */
- IF LOWER(@property collate SQL_Latin1_General_CP1_CS_AS) = 'distribution_db'
- BEGIN
- IF @value IS NULL
- BEGIN
- RAISERROR (14043, 16, -1, '@value')
- RETURN (1)
- END
-
- IF @value <> @distribdb and
- EXISTS (SELECT * FROM msdb.dbo.MSdistpublishers WHERE
- UPPER(name) = UPPER(@publisher) collate database_default and active = 1)
- BEGIN
- RAISERROR (21046, 16, -1)
- RETURN (1)
- END
-
- /*
- ** Check if database is configured as a distributor database
- */
- IF NOT EXISTS (SELECT * FROM master..sysdatabases
- WHERE name = @value collate database_default
- AND category & @distbit <> 0)
- BEGIN
- RAISERROR (14117, 16, -1, @new_database)
- RETURN(1)
- END
-
- UPDATE msdb..MSdistpublishers SET distribution_db = @value
- WHERE UPPER(name) = UPPER(@publisher) collate database_default
- IF @@error <> 0
- BEGIN
- RETURN (1)
- END
- END
-
- IF LOWER(@property collate SQL_Latin1_General_CP1_CS_AS) = 'working_directory'
- BEGIN
- IF @value IS NULL
- BEGIN
- RAISERROR (14043, 16, -1, '@value')
- RETURN (1)
- END
-
-
- -- Validate the working directory
- -- Remove heading and trailing spaces
- select @value = RTRIM(LTRIM(@value))
-
- -- if the last char is '\', remove it.
-
- if substring(@value, len(@value),1) = '\'
- select @value = substring(@value, 1,
- len(@value)-1)
-
- -- Don't do validation if it is a UNC path due to security problem.
- -- If the server is started as a service using local system account, we
- -- don't have access to the UNC path.
- if substring(@value, 1,2) <> '\\'
- begin
- select @command = 'dir ' + @value
- exec @retcode = master..xp_cmdshell @command, 'no_output'
- if @@error <> 0
- return 1
- if @retcode <> 0
- begin
- raiserror (21037, 16, -1, @value)
- return 1
- end
- end
-
- UPDATE msdb..MSdistpublishers SET working_directory = @value
- WHERE UPPER(name) = UPPER(@publisher) collate database_default
- IF @@error <> 0
- BEGIN
- RETURN (1)
- END
- END
-
- IF LOWER(@property collate SQL_Latin1_General_CP1_CS_AS) = 'security_mode'
- BEGIN
- IF @value IS NULL
- BEGIN
- RAISERROR (14043, 16, -1, '@value')
- RETURN (1)
- END
-
- /*
- ** Set the SecurityMode registry key value
- */
- SELECT @new_security_mode = CONVERT(int, @value)
-
- /*
- ** Check for invalid values
- */
- IF @new_security_mode < 0 OR @new_security_mode > 1
- BEGIN
- RAISERROR(14109, 16, -1)
- RETURN (1)
- END
-
- IF (UPPER(@publisher) = UPPER(@@SERVERNAME) and ( @platform_nt != platform() & @platform_nt ) and @new_security_mode = 1)
- BEGIN
- RAISERROR(21038, 16, -1)
- RETURN (1)
- END
-
- UPDATE msdb..MSdistpublishers SET security_mode = @new_security_mode
- WHERE UPPER(name) = UPPER(@publisher) collate database_default
- IF @@error <> 0
- BEGIN
- RETURN (1)
- END
- END
-
- IF LOWER(@property collate SQL_Latin1_General_CP1_CS_AS) = 'login'
- BEGIN
- IF @value IS NULL
- BEGIN
- RAISERROR (14043, 16, -1, '@value')
- RETURN (1)
- END
-
- /*
- ** Set the Login registry key value
- */
- SELECT @new_login = CONVERT(sysname, @value)
-
- UPDATE msdb..MSdistpublishers SET login = @new_login
- WHERE UPPER(name) = UPPER(@publisher) collate database_default
- IF @@error <> 0
- BEGIN
- RETURN (1)
- END
- END
-
- IF LOWER(@property collate SQL_Latin1_General_CP1_CS_AS) = 'password'
- BEGIN
- /*
- ** Set the Password registry key value
- */
- SELECT @new_password = CONVERT(nvarchar(524), @value)
-
- -- Encrypt the password
- EXEC @retcode = master.dbo.xp_repl_encrypt @new_password OUTPUT
- IF @@error <> 0 OR @retcode <> 0
- RETURN (1)
-
- UPDATE msdb..MSdistpublishers SET password = @new_password
- WHERE UPPER(name) = UPPER(@publisher) collate database_default
- IF @@error <> 0
- BEGIN
- RETURN (1)
- END
- END
-
- IF LOWER(@property collate SQL_Latin1_General_CP1_CS_AS) = 'active'
- BEGIN
- /*
- ** Check for a valid value.
- */
-
- IF LOWER(@value collate SQL_Latin1_General_CP1_CS_AS) NOT IN ('true', 'false')
- BEGIN
- RAISERROR (14137, 16, -1)
- RETURN (1)
- END
-
- IF LOWER(@value collate SQL_Latin1_General_CP1_CS_AS) = 'true'
- begin
- -- Clean up the database in case of the remote publisher is reinstalling publishing.
- SELECT @command = @distribdb + '.dbo.sp_MSdistpublisher_cleanup'
- exec @retcode = @command @publisher
- if @retcode <> 0 or @@error <> 0
- return 1
- SELECT @new_active = 1
- end
- ELSE
- BEGIN
- SELECT @new_active = 0
- END
-
- /*
- ** Set the Active registry key value
- */
- UPDATE msdb..MSdistpublishers SET active = @new_active
- WHERE UPPER(name) = UPPER(@publisher) collate database_default
- IF @@error <> 0
- BEGIN
- RETURN (1)
- END
-
- END
-
- IF LOWER(@property collate SQL_Latin1_General_CP1_CS_AS) = 'trusted'
- BEGIN
- /*
- ** Check for a valid value.
- */
-
- IF LOWER(@value collate SQL_Latin1_General_CP1_CS_AS) NOT IN ('true', 'false')
- BEGIN
- RAISERROR (14137, 16, -1)
- RETURN (1)
- END
-
- declare @fExists int
-
- IF LOWER(@value collate SQL_Latin1_General_CP1_CS_AS) = 'true'
- begin
- SELECT @new_trusted = 1
- exec @fExists = dbo.sp_MSIfExistsRemoteLogin @publisher, 'distributor_admin', 'sa'
- if( @fExists = 1 )
- BEGIN
- EXECUTE @retcode = dbo.sp_remoteoption @publisher, 'distributor_admin', 'sa', trusted, true
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14075, 16, -1)
- RETURN (1)
- END
- END
-
-
- EXECUTE @retcode = dbo.sp_remoteoption @publisher, 'distributor_admin',
- 'distributor_admin', trusted, true
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14075, 16, -1)
- RETURN (1)
- END
- end
- ELSE
- BEGIN
- SELECT @new_trusted = 0
-
- exec @fExists = dbo.sp_MSIfExistsRemoteLogin @publisher, 'distributor_admin', 'sa'
- if( @fExists = 1 )
- BEGIN
- EXECUTE @retcode = dbo.sp_remoteoption @publisher, 'distributor_admin', 'sa', trusted, false
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14075, 16, -1)
- RETURN (1)
- END
- END
-
-
- EXECUTE @retcode = dbo.sp_remoteoption @publisher, 'distributor_admin',
- 'distributor_admin', trusted, 'false'
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14075, 16, -1)
- RETURN (1)
- END
- END
-
- /*
- ** Set the trusted property
- */
- UPDATE msdb..MSdistpublishers SET trusted = @new_trusted
- WHERE UPPER(name) = UPPER(@publisher) collate database_default
- IF @@error <> 0
- BEGIN
- RETURN (1)
- END
- END
-
-
- /*
- ** Return succeed.
- */
- RAISERROR (21035, 10, -1, @property)
-
- DONE:
- RETURN (0)
- go
-
- raiserror('Creating procedure sp_helpdistpublisher', 0,1)
- go
-
- CREATE PROCEDURE sp_helpdistpublisher (
- @publisher sysname = '%' /* publisher server name */
- , @check_user bit = 0
- )
- AS
- BEGIN
- SET NOCOUNT ON
- declare @is_sysadmin int
-
- select @is_sysadmin = is_srvrolemember('sysadmin')
- IF @publisher IS null
- begin
- raiserror (14043, 16, -1, '@publisher')
- return (1)
- end
-
- /*
- ** Check to make sure this is a distributor
- */
- IF NOT EXISTS (select * from master..sysservers
- where UPPER(datasource) = UPPER(@@SERVERNAME) collate database_default
- AND srvstatus & 8 <> 0)
- begin
- if @publisher <> '%'
- begin
- raiserror (14114, 16, -1, @@SERVERNAME)
- return(1)
- end
- else
- return(0)
- end
-
- IF @publisher <> '%' AND NOT EXISTS (select * from msdb..MSdistpublishers
- where UPPER(name) = UPPER(@publisher) collate database_default)
- begin
- raiserror (14080, 11, -1)
- return (1)
- end
-
- -- If sysadmin, no need for filtering
- if @is_sysadmin = 1
- select @check_user = 0
-
- create table #distdbs (name sysname collate database_default)
-
- if @check_user = 1
- begin
- declare @distbit int, @db_name sysname, @cmd nvarchar(1000)
- select @distbit = 16
- declare hCdatabase CURSOR LOCAL FAST_FORWARD FOR
- select name from master.dbo.sysdatabases
- where
- category & @distbit <> 0 and
- has_dbaccess(name) = 1
- for read only
-
- open hCdatabase
- fetch next from hCdatabase into @db_name
- while (@@fetch_status <> -1)
- begin
-
- -- Check to see if the user has permision to monitor the distribution
- -- database.
- declare @has_pm bit
- select @cmd = quotename(@db_name) + '.dbo.sp_executesql'
- exec @cmd
- N'if is_member(N''db_owner'') = 1 or is_member(N''replmonitor'') = 1 set @has_pm = 1',
- N'@has_pm bit output',
- @has_pm output
- if @has_pm = 1
- insert #distdbs values (@db_name)
- fetch next from hCdatabase into @db_name
- end
- close hCdatabase
- deallocate hCdatabase
- end
-
- SELECT p.name, distribution_db, security_mode,
- -- Not to return login unless sysadmin is called.
- 'login' = case when (@is_sysadmin = 1) then login else cast(NULL as sysname) end,
- -- Not to return password unless sysadmin is called.
- 'password' = case when (@is_sysadmin = 1) then password else cast(NULL as sysname) end,
- active, working_directory, trusted, thirdparty_flag
- FROM msdb.dbo.MSdistpublishers p
- where ((@publisher = N'%') or (UPPER(p.name) collate database_default = UPPER(@publisher) collate database_default)) and
- (@check_user = 0 or exists
- (select * from #distdbs d where p.distribution_db = d.name collate database_default))
- IF @@ERROR <> 0
- begin
- return(1)
- end
- END
- GO
-
- dump tran master with no_log
- go
-
- raiserror('Creating procedure sp_add_agent_profile', 0,1)
- go
-
- /*
- ** The system profile of the same type of agent will be used as a template for
- ** the parameters in this new user profile.
- */
- CREATE PROCEDURE sp_add_agent_profile (
- @profile_id int = NULL OUTPUT,
- @profile_name sysname,
- @agent_type int, -- 1-Snapshot, 2-Logreader,
- -- 3-Distribution, 4-Merge,
- -- 9-Qreader
- @profile_type int = 1, -- 0-System, 1-Custom
- @description nvarchar(3000) = NULL,
- @default bit = 0 -- 0-Not Default, 1-Default
- )
- AS
- SET NOCOUNT ON
-
- declare @sys_profile int
- declare @default_id int
- declare @sysdefault_id int
- declare @retcode int
-
- SELECT @profile_name = RTRIM(@profile_name)
-
- IF @profile_name IS NULL
- BEGIN
- RAISERROR (14043, 16, -1, '@profile_name')
- RETURN (1)
- END
-
- exec @retcode = dbo.sp_MSreplcheck_name @profile_name
- if @@ERROR <> 0 or @retcode <> 0
- return(1)
-
- /* The profile name is unique across a particular agent type */
- IF EXISTS ( SELECT * FROM msdb..MSagent_profiles
- WHERE profile_name = @profile_name collate database_default
- AND agent_type = @agent_type )
- BEGIN
- RAISERROR(20057, 16, -1, @profile_name)
- RETURN (1)
- END
-
- IF @agent_type NOT IN (1, 2, 3, 4, 9)
- BEGIN
- RAISERROR(20058, 16, -1)
- return (1)
- END
-
- IF @profile_type NOT IN (0, 1)
- BEGIN
- RAISERROR(20059, 16, -1)
- return (1)
- END
-
- BEGIN TRAN
-
- /*
- ** First find out the default profile of the same agent type
- */
- select @default_id = profile_id from msdb..MSagent_profiles WHERE agent_type = @agent_type AND def_profile = 1
-
- INSERT INTO msdb..MSagent_profiles
- VALUES (@profile_name, @agent_type, @profile_type, @description, 0)
- IF @@ERROR <> 0
- GOTO UNDO
-
- SELECT @profile_id = profile_id
- FROM msdb..MSagent_profiles
- WHERE profile_name = @profile_name collate database_default AND agent_type = @agent_type
-
- /*
- ** If there is system profiles of the same agent type, use the primary system one as template of parameter set
- */
- IF EXISTS (select * from msdb..MSagent_profiles where agent_type = @agent_type AND type = 0)
- select @sysdefault_id = min(profile_id) from msdb..MSagent_profiles where agent_type = @agent_type AND type = 0
-
- if @sysdefault_id IS NULL
- select @sysdefault_id = @default_id
-
- if @profile_type=1
- BEGIN
- INSERT INTO msdb..MSagent_parameters
- select @profile_id, parameter_name, value from msdb..MSagent_parameters
- where profile_id = @sysdefault_id
- if @@ERROR<>0
- GOTO UNDO
- END
-
- /* Only one profile for an agent type must be default */
- IF @default = 1
- BEGIN
- UPDATE msdb..MSagent_profiles
- SET def_profile = 0 WHERE profile_id = @default_id
- IF @@ERROR <> 0
- GOTO UNDO
- UPDATE msdb..MSagent_profiles
- SET def_profile = 1 WHERE profile_id = @profile_id
- IF @@ERROR <> 0
- GOTO UNDO
- END
-
- COMMIT TRAN
- RETURN 0
-
- UNDO:
-
- IF @@TRANCOUNT = 1
- ROLLBACK TRAN
- ELSE
- COMMIT TRAN
-
- RETURN 1
- GO
-
- raiserror('Creating procedure sp_drop_agent_parameter', 0,1)
- go
-
- -- Drop a/all parameter(s) of a/all profile(s) from the MSagent_parameters table
- create procedure sp_drop_agent_parameter (
- @profile_id int,
- @parameter_name sysname = '%'
- )
- as
- set nocount on
-
- declare @default bit
- declare @agent_type int
- declare @retstatus int
- select @retstatus = 0
-
- if @parameter_name is null
- BEGIN
- RAISERROR (14043, 16, -1, '@parameter_name')
- RETURN (1)
- END
-
- select @agent_type = agent_type, @default=def_profile
- from msdb..MSagent_profiles
- where profile_id = @profile_id
-
- if @default is null
- BEGIN
- RAISERROR (20066, 16, -1) -- profile not defined
- RETURN (1)
- END
-
- select @parameter_name = lower(@parameter_name collate SQL_Latin1_General_CP1_CS_AS)
-
- if left(@parameter_name,1) in (N'-', N'/')
- select @parameter_name = right(@parameter_name,len(@parameter_name)-1)
-
- /* Delete the parameters of the profile */
- delete msdb..MSagent_parameters
- where right(lower(parameter_name collate SQL_Latin1_General_CP1_CS_AS),len(parameter_name)-1) like
- @parameter_name collate SQL_Latin1_General_CP1_CS_AS
- and profile_id = @profile_id
-
- if @@error <> 0
- begin
- select @retstatus = 1
- goto UNDO
- end
-
- UNDO:
-
- return @retstatus
- GO
-
- raiserror('Creating procedure sp_drop_agent_profile', 0,1)
- go
- -- Drop a profile from the MSagent_profiles table, as well as the corresponding
- -- parameters from the MSagent_parameters table
-
- CREATE PROCEDURE sp_drop_agent_profile (
- @profile_id int
- )
- AS
- SET NOCOUNT ON
-
- declare @snapshot_type int
- declare @logreader_type int
- declare @distribution_type int
- declare @merge_type int
- declare @qreader_type int
-
- declare @tablename nvarchar(255)
- declare @proc nvarchar(255)
- declare @distribution_db sysname
- declare @profile_type int
-
- declare @default bit
- declare @usage_count int
- declare @agent_type int
- declare @retstatus int
- DECLARE @retcode int
-
- declare @default_sys_id int
-
- SELECT @agent_type = agent_type, @profile_type = type, @default=def_profile
- FROM msdb..MSagent_profiles
- WHERE profile_id = @profile_id
-
- IF @default IS NULL
- BEGIN
- RAISERROR (20066, 16, -1) -- Profile not defined
- RETURN (1)
- END
-
- /*
- ** Before dropping a default profile, one system profile of the same agent type
- ** has to become the new default profile.
- */
- IF @default = 1
- BEGIN
- select @default_sys_id=min(profile_id) from msdb..MSagent_profiles
- where agent_type = @agent_type AND type = 0
-
- UPDATE msdb..MSagent_profiles SET def_profile = 1 WHERE profile_id = @default_sys_id
- END
-
- select @snapshot_type = 1
- select @logreader_type = 2
- select @distribution_type = 3
- select @merge_type = 4
- select @qreader_type = 9
-
- /* By default, assume that this profile is not being used */
- select @usage_count = -1
-
- select @tablename =
- case @agent_type
- when @snapshot_type then 'MSsnapshot_agents'
- when @logreader_type then 'MSlogreader_agents'
- when @distribution_type then 'MSdistribution_agents'
- when @merge_type then 'MSmerge_agents'
- when @qreader_type then 'MSqreader_agents'
- end
-
- declare hCdistdbs CURSOR LOCAL FAST_FORWARD FOR
- select distinct distribution_db
- from msdb..MSdistpublishers
- for read only
-
- open hCdistdbs
- fetch hCdistdbs into @distribution_db
-
- while @@fetch_status <> -1 and @usage_count = -1
- begin
- select @proc = @distribution_db + '.dbo.sp_MSprofile_in_use'
- execute @usage_count = @proc @tablename = @tablename, @profile_id = @profile_id
-
- if @@error <> 0
- begin
- select @retstatus = 1
- goto UNDO
- end
-
- fetch hCdistdbs into @distribution_db
- end
-
- /* A profile in use cannot be dropped */
- if @usage_count = 0
- begin
- RAISERROR(20065, 16, -1) -- Cannot drop profile, because it is in use.
- select @retstatus = 1
- goto UNDO
- end
-
- BEGIN TRAN
-
- /*****
- * NOTE : If sp_drop_agent_parameter fails, the profile must not be
- * deleted either
- */
- EXECUTE @retcode = dbo.sp_drop_agent_parameter @profile_id = @profile_id,
- @parameter_name = '%'
-
- IF @@ERROR <> 0 OR @retcode <> 0
- GOTO UNDO
-
- /* Delete all the entries in one go */
- DELETE msdb..MSagent_profiles
- WHERE profile_id = @profile_id
-
- IF @@ERROR <> 0
- GOTO UNDO
-
- COMMIT TRAN
-
- close hCdistdbs
- deallocate hCdistdbs
-
- RETURN 0
-
- UNDO:
- IF @@TRANCOUNT = 1
- ROLLBACK TRAN
- ELSE IF @@TRANCOUNT > 1 -- Sometimes we can get here when @@trancount = 0, so need to check explicitly.
- COMMIT TRAN
-
- close hCdistdbs
- deallocate hCdistdbs
-
-
- RETURN (1)
- GO
-
- raiserror('Creating procedure sp_help_agent_profile', 0,1)
- go
-
-
- -- View the row(s) of the MSagent_profiles table
-
- create procedure sp_help_agent_profile(
- @agent_type int = 0,
- @profile_id int = -1
- )
- as
- set nocount on
-
- declare @proc nvarchar(255)
-
- declare @snapshot_type int
- declare @logreader_type int
- declare @distribution_type int
- declare @merge_type int
- declare @qreader_type int
-
- select @snapshot_type = 1
- select @logreader_type = 2
- select @distribution_type = 3
- select @merge_type = 4
- select @qreader_type = 9
-
- if @agent_type is null
- BEGIN
- RAISERROR (14043, 16, -1, '@agent_type')
- RETURN (1)
- END
-
- if @profile_id is null
- BEGIN
- RAISERROR (14043, 16, -1, '@profile_id')
- RETURN (1)
- END
-
- if @agent_type not in (0, @snapshot_type, @logreader_type, @distribution_type, @merge_type, @qreader_type)
- BEGIN
- RAISERROR(20058, 16, -1)
- return (1)
- END
-
- select profile_id, profile_name, agent_type, type, description, def_profile
- from msdb..MSagent_profiles where
- (profile_id = @profile_id or @profile_id = -1) and
- (agent_type = @agent_type or @agent_type = 0)
- order by profile_id, profile_name
-
- GO
-
- raiserror('Creating procedure sp_help_agent_default', 0,1)
- go
-
- create procedure sp_help_agent_default (
- @profile_id int OUTPUT,
- @agent_type int
- )
- as
- set nocount on
-
- if @agent_type not in (1, 2, 3, 4)
- BEGIN
- RAISERROR(20058, 16, -1)
- return (1)
- END
-
-
- select @profile_id = profile_id
- from msdb..MSagent_profiles
- where agent_type = @agent_type
- and def_profile = 1
- go
-
- raiserror('Creating procedure sp_MSupdate_agenttype_default', 0,1)
- go
-
- -- Set a profile as a default for an agent_type
- create procedure sp_MSupdate_agenttype_default(
- @profile_id int
- )
- as
- set nocount on
-
- declare @agent_type int
-
- /* This profile must have been defined for this agent type */
- if not exists ( select * from msdb..MSagent_profiles
- where profile_id = @profile_id )
- BEGIN
- RAISERROR (20066, 16, -1) -- profile not defined
- RETURN (1)
- END
-
-
- select @agent_type = agent_type
- from msdb..MSagent_profiles
- where profile_id = @profile_id
-
- BEGIN TRAN
-
- update msdb..MSagent_profiles
- set def_profile = 0
- where agent_type = @agent_type
- and def_profile = 1
-
- if @@error <> 0
- goto UNDO
-
- update msdb..MSagent_profiles
- set def_profile = 1
- where profile_id = @profile_id
-
- if @@error <> 0
- goto UNDO
-
- COMMIT TRAN
-
- return 0
-
- UNDO:
- if @@trancount = 1
- rollback tran
- else
- commit tran
-
- return 1
- GO
-
-
- /*
- ** Create stored procedures to generate default profile
- ** parameters for replication agents.
- */
-
- raiserror('Creating procedure sp_generate_agent_parameter', 0,1)
- GO
-
- create procedure sp_generate_agent_parameter(
- @profile_id int, -- Fixed profile id used
- @real_profile_id int = NULL -- Used by version upgrade
- )
- as
- declare @retcode int
-
- -- If real profile id is not passed in. Use the fix profile id.
- if @real_profile_id is NULL
- select @real_profile_id = @profile_id
-
- /*
- ** Snapshot agent
- */
- if (@profile_id = 1)
- begin
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-BcpBatchSize',
- @parameter_value = '100000'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-HistoryVerboseLevel',
- @parameter_value = '2'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-LoginTimeout',
- @parameter_value = '15'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxBcpThreads',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-QueryTimeout',
- @parameter_value = '300' -- 5 minutes
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
- end
-
- /*
- ** Logreader agent
- */
- else if (@profile_id = 2)
- begin
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-HistoryVerboseLevel',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-LoginTimeout',
- @parameter_value = '15'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-PollingInterval',
- @parameter_value = '10'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-QueryTimeout',
- @parameter_value = '300' -- 5 minutes
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-ReadBatchSize',
- @parameter_value = '500'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- end
-
- /*
- ** Logreader agent - Verbose History Profile
- */
- else if (@profile_id = 3)
- begin
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-HistoryVerboseLevel',
- @parameter_value = '2'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-LoginTimeout',
- @parameter_value = '15'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-PollingInterval',
- @parameter_value = '10'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-QueryTimeout',
- @parameter_value = '300' -- 5 minutes
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-ReadBatchSize',
- @parameter_value = '500'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- end
-
- /*
- ** Distribution agent
- */
- else if (@profile_id = 4)
- begin
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-BcpBatchSize',
- @parameter_value = '100000'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-CommitBatchSize',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-CommitBatchThreshold',
- @parameter_value = '1000'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-HistoryVerboseLevel',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-LoginTimeout',
- @parameter_value = '15'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxBcpThreads',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxDeliveredTransactions',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-PollingInterval',
- @parameter_value = '10'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-QueryTimeout',
- @parameter_value = '300' -- 5 minutes
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-TransactionsPerHistory',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-SkipErrors',
- @parameter_value = ''
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-KeepAliveMessageInterval',
- @parameter_value = '300'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- end
-
- /*
- ** Distribution Agent Verbose History Profile
- */
- else if (@profile_id = 5)
- begin
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-BcpBatchSize',
- @parameter_value = '100000'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-CommitBatchSize',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-CommitBatchThreshold',
- @parameter_value = '1000'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-HistoryVerboseLevel',
- @parameter_value = '2'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-LoginTimeout',
- @parameter_value = '15'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxBcpThreads',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxDeliveredTransactions',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-PollingInterval',
- @parameter_value = '10'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-QueryTimeout',
- @parameter_value = '300' -- 5 minutes
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-TransactionsPerHistory',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-SkipErrors',
- @parameter_value = ''
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-KeepAliveMessageInterval',
- @parameter_value = '300'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- end
- /*
- ** Merge agent : Default profile for well connected scenarios
- */
- else if (@profile_id = 6)
- begin
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-PollingInterval',
- @parameter_value = '60'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-StartQueueTimeout',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxDownloadChanges',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxUploadChanges',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-ValidateInterval',
- @parameter_value = '60'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-LoginTimeout',
- @parameter_value = '15'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-QueryTimeout',
- @parameter_value = '300'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadGenerationsPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadGenerationsPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadReadChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadReadChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadWriteChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadWriteChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-Validate',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-FastRowCount',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-HistoryVerboseLevel',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-ChangesPerHistory',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-BcpBatchSize',
- @parameter_value = '100000'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-NumDeadlockRetries',
- @parameter_value = '5'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-SrcThreads',
- @parameter_value = '3'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DestThreads',
- @parameter_value = '4'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-KeepAliveMessageInterval',
- @parameter_value = '300'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MetadataRetentionCleanup',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- end
-
- /*
- ** Merge agent : Non default profile for disconnected scenarios ( unreliable link )
- */
- else if (@profile_id = 7)
- begin
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-PollingInterval',
- @parameter_value = '60'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-StartQueueTimeout',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxDownloadChanges',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxUploadChanges',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-ValidateInterval',
- @parameter_value = '60'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-LoginTimeout',
- @parameter_value = '15'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-QueryTimeout',
- @parameter_value = '300'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadGenerationsPerBatch',
- @parameter_value = '20'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadGenerationsPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadReadChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadReadChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadWriteChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadWriteChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-Validate',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-FastRowCount',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-HistoryVerboseLevel',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-ChangesPerHistory',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-BcpBatchSize',
- @parameter_value = '100000'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-KeepAliveMessageInterval',
- @parameter_value = '300'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-NumDeadlockRetries',
- @parameter_value = '5'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-SrcThreads',
- @parameter_value = '3'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DestThreads',
- @parameter_value = '4'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MetadataRetentionCleanup',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- end
-
- /*
- ** Merge agent : Default profile for well connected scenarios - Verbose history logging
- */
- else if (@profile_id = 8)
- begin
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-PollingInterval',
- @parameter_value = '60'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-StartQueueTimeout',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxDownloadChanges',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxUploadChanges',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-ValidateInterval',
- @parameter_value = '60'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-LoginTimeout',
- @parameter_value = '15'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-QueryTimeout',
- @parameter_value = '300'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadGenerationsPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadGenerationsPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadReadChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadReadChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadWriteChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadWriteChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-Validate',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-FastRowCount',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-HistoryVerboseLevel',
- @parameter_value = '3'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-ChangesPerHistory',
- @parameter_value = '50'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-BcpBatchSize',
- @parameter_value = '100000'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-NumDeadlockRetries',
- @parameter_value = '5'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-SrcThreads',
- @parameter_value = '3'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DestThreads',
- @parameter_value = '4'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-KeepAliveMessageInterval',
- @parameter_value = '300'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MetadataRetentionCleanup',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- end
-
- /*
- ** Merge agent : (Synchronization Manager Profile)
- */
- else if (@profile_id = 9)
- begin
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-PollingInterval',
- @parameter_value = '60'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-StartQueueTimeout',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxDownloadChanges',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxUploadChanges',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-ValidateInterval',
- @parameter_value = '60'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-LoginTimeout',
- @parameter_value = '15'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-QueryTimeout',
- @parameter_value = '300'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadGenerationsPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadGenerationsPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadReadChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadReadChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadWriteChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadWriteChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-Validate',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-FastRowCount',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-HistoryVerboseLevel',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-ChangesPerHistory',
- @parameter_value = '50'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-BcpBatchSize',
- @parameter_value = '1000'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-NumDeadlockRetries',
- @parameter_value = '5'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-SrcThreads',
- @parameter_value = '3'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DestThreads',
- @parameter_value = '4'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-KeepAliveMessageInterval',
- @parameter_value = '300'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MetadataRetentionCleanup',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- end
-
- /*
- ** Distribution agent (Synchronization Manager Profile)
- */
- else if (@profile_id = 10)
- begin
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-BcpBatchSize',
- @parameter_value = '1000'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-CommitBatchSize',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-CommitBatchThreshold',
- @parameter_value = '1000'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-HistoryVerboseLevel',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-LoginTimeout',
- @parameter_value = '15'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxBcpThreads',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxDeliveredTransactions',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-PollingInterval',
- @parameter_value = '10'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-QueryTimeout',
- @parameter_value = '300' -- 5 minutes
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-TransactionsPerHistory',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-SkipErrors',
- @parameter_value = ''
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-KeepAliveMessageInterval',
- @parameter_value = '300'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- end
-
- /*
- ** Queue Reader agent default profile
- */
- else if (@profile_id = 11)
- begin
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-HistoryVerboseLevel',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-PollingInterval',
- @parameter_value = '10'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-LoginTimeout',
- @parameter_value = '15'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-QueryTimeout',
- @parameter_value = '300' -- 5 minutes
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
- end
-
- /*
- ** Merge agent : Rowcount Validation profile for well connected scenarios
- */
- else if (@profile_id = 12)
- begin
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-PollingInterval',
- @parameter_value = '60'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-StartQueueTimeout',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxDownloadChanges',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxUploadChanges',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-ValidateInterval',
- @parameter_value = '60'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-LoginTimeout',
- @parameter_value = '15'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-QueryTimeout',
- @parameter_value = '300'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadGenerationsPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadGenerationsPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadReadChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadReadChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadWriteChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadWriteChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-Validate',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-FastRowCount',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-HistoryVerboseLevel',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-ChangesPerHistory',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-BcpBatchSize',
- @parameter_value = '100000'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-NumDeadlockRetries',
- @parameter_value = '5'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-SrcThreads',
- @parameter_value = '3'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DestThreads',
- @parameter_value = '4'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-KeepAliveMessageInterval',
- @parameter_value = '300'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MetadataRetentionCleanup',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- end
-
- /*
- ** Merge agent : Rowcount & Checksum Validation profile for well connected scenarios
- */
- else if (@profile_id = 13)
- begin
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-PollingInterval',
- @parameter_value = '60'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-StartQueueTimeout',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxDownloadChanges',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxUploadChanges',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-ValidateInterval',
- @parameter_value = '60'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-LoginTimeout',
- @parameter_value = '15'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-QueryTimeout',
- @parameter_value = '300'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadGenerationsPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadGenerationsPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadReadChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadReadChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadWriteChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadWriteChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-Validate',
- @parameter_value = '3'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-FastRowCount',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-HistoryVerboseLevel',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-ChangesPerHistory',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-BcpBatchSize',
- @parameter_value = '100000'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-NumDeadlockRetries',
- @parameter_value = '5'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-SrcThreads',
- @parameter_value = '3'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DestThreads',
- @parameter_value = '4'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-KeepAliveMessageInterval',
- @parameter_value = '300'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MetadataRetentionCleanup',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- end
-
- /*
- ** Distribution agent, skip error profile
- */
- else if (@profile_id = 14)
- begin
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-BcpBatchSize',
- @parameter_value = '100000'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-CommitBatchSize',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-CommitBatchThreshold',
- @parameter_value = '1000'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-HistoryVerboseLevel',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-LoginTimeout',
- @parameter_value = '15'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxBcpThreads',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxDeliveredTransactions',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-PollingInterval',
- @parameter_value = '10'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-QueryTimeout',
- @parameter_value = '300' -- 5 minutes
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-TransactionsPerHistory',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-SkipErrors',
- @parameter_value = '2601:2627:20598'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-KeepAliveMessageInterval',
- @parameter_value = '300'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- end
-
- /*
- ** Merge agent : Rowcount Validation profile for high volumn server-to-server
- */
- else if (@profile_id = 15)
- begin
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-PollingInterval',
- @parameter_value = '60'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-StartQueueTimeout',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxDownloadChanges',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MaxUploadChanges',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-ValidateInterval',
- @parameter_value = '60'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-LoginTimeout',
- @parameter_value = '15'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-QueryTimeout',
- @parameter_value = '600'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadGenerationsPerBatch',
- @parameter_value = '2000'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadGenerationsPerBatch',
- @parameter_value = '2000'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadReadChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadReadChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-UploadWriteChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DownloadWriteChangesPerBatch',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-Validate',
- @parameter_value = '0'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-FastRowCount',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-HistoryVerboseLevel',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-ChangesPerHistory',
- @parameter_value = '100'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-BcpBatchSize',
- @parameter_value = '100000'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-NumDeadlockRetries',
- @parameter_value = '5'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-SrcThreads',
- @parameter_value = '3'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-DestThreads',
- @parameter_value = '4'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-KeepAliveMessageInterval',
- @parameter_value = '300'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- exec @retcode = dbo.sp_add_agent_parameter
- @profile_id = @real_profile_id,
- @parameter_name = '-MetadataRetentionCleanup',
- @parameter_value = '1'
- if (@retcode = 1 or @@ERROR <> 0)
- goto FAILURE
-
- end
-
- return 0
- FAILURE:
- return 1
- go
-
-
- raiserror('Creating procedure sp_MSvalidate_agent_parameter', 0,1)
- go
- create procedure sp_MSvalidate_agent_parameter (
- @profile_id int,
- @parameter_name sysname,
- @parameter_value nvarchar(255)
- )
- as
- declare @agent_type int
- declare @original_parameter_name sysname
- declare @numeric_value int
-
- -- Make sure parameters are non-null
- if @profile_id is null
- BEGIN
- RAISERROR (14043, 16, -1, '@profile_id')
- RETURN (1)
- END
-
- if @parameter_name is null
- BEGIN
- RAISERROR (14043, 16, -1, '@parameter_name')
- RETURN (1)
- END
-
- IF @parameter_value is null
- BEGIN
- RAISERROR (14043, 16, -1, '@parameter_value')
- RETURN (1)
- END
-
- select @original_parameter_name = @parameter_name
-
- select @agent_type = agent_type
- from msdb..MSagent_profiles
- where profile_id = @profile_id
-
- -- Parameter name validation
- if (substring(@parameter_name, 1, 1) <> '/' and
- substring(@parameter_name, 1, 1) <> '-')
- begin
- return 1
- end
-
- select @parameter_name = lower(substring(@parameter_name, 2, len(@parameter_name) - 1) collate SQL_Latin1_General_CP1_CS_AS)
-
- -- Snapshot agent - agent_type = 1
- if (@agent_type = 1)
- begin
- if not @parameter_name in (
- N'bcpbatchsize',
- N'historyverboselevel',
- N'logintimeout',
- N'maxbcpthreads',
- N'querytimeout',
- N'startqueuetimeout',
- N'maxnetworkoptimization'
- )
- begin
- raiserror(21111, 16, -1, @original_parameter_name)
- return 1
- end
- end
- -- Logreader - agent_type = 2
- else if (@agent_type =2)
- begin
- if not lower(@parameter_name collate SQL_Latin1_General_CP1_CS_AS) in (
- N'historyverboselevel',
- N'logintimeout',
- N'pollinginterval',
- N'querytimeout',
- N'readbatchsize'
- )
- begin
- raiserror(21112, 16, -1, @original_parameter_name)
- return 1
- end
- end
- -- Distribution agent - agent_type = 3
- else if (@agent_type = 3)
- begin
- if not @parameter_name in (
- N'bcpbatchsize',
- N'commitbatchsize',
- N'commitbatchthreshold',
- N'historyverboselevel',
- N'logintimeout',
- N'maxbcpthreads',
- N'maxdeliveredtransactions',
- N'pollinginterval',
- N'querytimeout',
- N'transactionsperhistory',
- N'skiperrors',
- N'keepalivemessageinterval',
- N'useinprocloader'
- )
- begin
- raiserror(21113, 16, -1, @original_parameter_name)
- return 1
- end
- end
- -- Merge agent - agent_type = 4
- else if (@agent_type = 4)
- begin
- if not @parameter_name in (
- N'startqueuetimeout',
- N'pollinginterval',
- N'validateinterval',
- N'logintimeout',
- N'querytimeout',
- N'maxuploadchanges',
- N'maxdownloadchanges',
- N'uploadgenerationsperbatch',
- N'downloadgenerationsperbatch',
- N'uploadreadchangesperbatch',
- N'downloadreadchangesperbatch',
- N'uploadwritechangesperbatch',
- N'downloadwritechangesperbatch',
- N'validate',
- N'fastrowcount',
- N'historyverboselevel',
- N'changesperhistory',
- N'bcpbatchsize',
- N'numdeadlockretries',
- N'keepalivemessageinterval',
- N'srcthreads',
- N'destthreads',
- N'useinprocloader',
- N'metadataretentioncleanup'
- )
- begin
- raiserror(21114, 16, -1, @original_parameter_name)
- return 1
- end
- end
- -- Qreader agent - agent_type = 9
- else if (@agent_type = 9)
- begin
- if not lower(@parameter_name collate SQL_Latin1_General_CP1_CS_AS) in (
- N'resolverstate',
- N'sqlqueuemode',
- N'historyverboselevel',
- N'pollinginterval',
- N'logintimeout',
- N'querytimeout'
- )
- begin
- raiserror(21112, 16, -1, @original_parameter_name)
- return 1
- end
- end
- else if @agent_type is null
- begin
- raiserror (20066, 16, -1) -- profile not defined
- return 1
- end
- else
- begin
- -- MSagent_parameters table corruption
- return 1
- end
-
- -- Parameter value validation
- if (@parameter_name = N'bcpbatchsize')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 1
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'commitbatchsize')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 1
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'commitbatchthreshold')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 1
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'downloadgenerationsperbatch')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 1
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- if @numeric_value > 2000
- begin
- raiserror(14266, 16, -1, 'DownloadGenerationsPerBatch', '1 - 2000')
- return 1
- end
- end
- else if (@parameter_name = N'downloadreadchangesperbatch')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 1
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- if @numeric_value > 2000
- begin
- raiserror(14266, 16, -1, 'DownloadReadChangesPerBatch', '1 - 2000')
- return 1
- end
- end
- else if (@parameter_name = N'downloadwritechangesperbatch')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 1
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- if @numeric_value > 2000
- begin
- raiserror(14266, 16, -1, 'DownloadWriteChangesPerBatch', '1 - 2000')
- return 1
- end
- end
- else if (@parameter_name = N'fastrowcount')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or not (@numeric_value in (1,2,3))
- begin
- raiserror(21116, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'historyverboselevel')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or not (@numeric_value in (0,1,2,3))
- begin
- raiserror(21117, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'logintimeout')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 1
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'maxbcpthreads')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 1
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'maxdeliveredtransactions')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 0
- begin
- raiserror(21119, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'pollinginterval')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 1
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'querytimeout')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 1
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'readbatchsize')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 1
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'transactionsperhistory')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value not between 0 and 10000
- begin
- raiserror(211118, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'uploadgenerationsperbatch')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 1
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- if @numeric_value > 2000
- begin
- raiserror(14266, 16, -1, 'UploadGenerationsPerBatch', '1 - 2000')
- return 1
- end
- end
- else if (@parameter_name = N'uploadreadchangesperbatch')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 1
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- if @numeric_value > 2000
- begin
- raiserror(14266, 16, -1, 'UploadReadChangesPerBatch', '1 - 2000')
- return 1
- end
- end
- else if (@parameter_name = N'uploadwritechangesperbatch')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 1
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- if @numeric_value > 2000
- begin
- raiserror(14266, 16, -1, 'UploadWriteChangesPerBatch', '1 - 2000')
- return 1
- end
- end
- else if (@parameter_name = N'validate')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or not (@numeric_value in (0,1,2,3))
- begin
- raiserror(21117, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'validateinterval')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 1
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'skiperrors')
- begin
- -- Empty string is valid.
- if @parameter_value <> N''
- begin
- -- Valid format: 11:22:33
- if @parameter_value like '%[^0-9:]%' or
- @parameter_value like ':%' or
- @parameter_value like '%:' or
- @parameter_value like '%::%'
- begin
- raiserror(20601, 16, -1)
- return 1
- end
- -- cannot has number of errors equals to or more than 11
- if @parameter_value like '%:%:%:%:%:%:%:%:%:%:%'
- begin
- raiserror(20602, 16, -1)
- return 1
- end
- end
- end
- -- Parameter value validation
- else if (@parameter_name = N'numdeadlockretries')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 1
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- if @numeric_value > 100
- begin
- raiserror(14266, 16, -1, 'NumDeadlockRetries', '1 - 100')
- return 1
- end
- end
- else if (@parameter_name = N'srcthreads')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 1
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'destthreads')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 1
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'keepalivemessageinterval')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value < 30
- begin
- raiserror(21405, 16, -1, @parameter_value, @original_parameter_name, 30)
- return 1
- end
- end
- else if (@parameter_name = N'useinprocloader')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value not in (0, 1) or rtrim(@parameter_value) = N''
- begin
- raiserror(21406, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'startqueuetimeout')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or (@numeric_value < 300 and @numeric_value <> 0) or rtrim(@parameter_value) = N''
- begin
- raiserror(21404, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'resolverstate')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value not in (1,2,3)
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'sqlqueuemode')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value not in (0,1,2)
- begin
- raiserror(21115, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
- else if (@parameter_name = N'maxnetworkoptimization')
- begin
- select @numeric_value = convert(int, @parameter_value)
- if @@error <> 0 or @numeric_value not in (0, 1) or rtrim(@parameter_value) = N''
- begin
- raiserror(21406, 16, -1, @parameter_value, @original_parameter_name)
- return 1
- end
- end
-
- return 0
- go
-
- EXEC dbo.sp_MS_marksystemobject 'sp_MSvalidate_agent_parameter'
-
-
- raiserror('Creating procedure sp_add_agent_parameter', 0,1)
- go
-
- -- Add a row into the "MSagent_parameters" table
- create procedure sp_add_agent_parameter (
- @profile_id int,
- @parameter_name sysname,
- @parameter_value nvarchar(255)
- )
- as
- declare @slash_parameter_name sysname
- declare @dash_parameter_name sysname
- declare @retcode int
-
- set nocount on
-
- select @parameter_name = RTRIM(@parameter_name)
-
- -- Append leading '-' when not given
- if (substring(@parameter_name, 1, 1) <> '/' and
- substring(@parameter_name, 1, 1) <> '-')
- BEGIN
- select @parameter_name = N'-' + @parameter_name
- END
-
- -- Call proc to validate parameter value
- exec @retcode = dbo.sp_MSvalidate_agent_parameter
- @profile_id = @profile_id,
- @parameter_name = @parameter_name,
- @parameter_value = @parameter_value
- if @retcode <> 0
- RETURN(1)
-
-
- select @slash_parameter_name = lower(stuff(@parameter_name, 1, 1, N'/') collate SQL_Latin1_General_CP1_CS_AS)
- select @dash_parameter_name = lower(stuff(@parameter_name, 1, 1, N'-') collate SQL_Latin1_General_CP1_CS_AS)
-
-
- /* A parameter may be defined only once per profile */
- if exists ( select * from msdb..MSagent_parameters
- where profile_id = @profile_id
- and (lower(parameter_name collate SQL_Latin1_General_CP1_CS_AS) = @slash_parameter_name collate SQL_Latin1_General_CP1_CS_AS
- or lower(parameter_name collate SQL_Latin1_General_CP1_CS_AS) = @dash_parameter_name collate SQL_Latin1_General_CP1_CS_AS))
- BEGIN
- RAISERROR (20067, 16, -1, @parameter_name) -- The parameter name ''%s'' already exists for the specified profile
- RETURN (1)
- END
-
- insert into msdb..MSagent_parameters
- values (@profile_id, @parameter_name, @parameter_value) ;
-
- if @@error <> 0
- return(1)
- GO
-
- raiserror('Creating procedure sp_change_agent_parameter', 0,1)
- go
- -- Change one parameter of a profile from the MSagent_parameters table
- create procedure sp_change_agent_parameter(
- @profile_id int,
- @parameter_name sysname,
- @parameter_value nvarchar(255)
- )AS
- declare @slash_parameter_name sysname
- declare @dash_parameter_name sysname
- declare @retcode int
-
- select @parameter_name = LTRIM(RTRIM(@parameter_name))
- select @parameter_value = LTRIM(RTRIM(@parameter_value))
-
- -- DMO sends in empty sting as '(null)'.
- if @parameter_value = N'(null)'
- select @parameter_value = N''
-
- -- Append leading '-' when not given
- if (substring(@parameter_name, 1, 1) <> '/' and
- substring(@parameter_name, 1, 1) <> '-')
- BEGIN
- select @parameter_name = N'-' + @parameter_name
- END
-
- -- Call proc to validate parameter value
- exec @retcode = dbo.sp_MSvalidate_agent_parameter
- @profile_id = @profile_id,
- @parameter_name = @parameter_name,
- @parameter_value = @parameter_value
- if @retcode <> 0
- RETURN(1)
-
-
- select @slash_parameter_name = lower(stuff(@parameter_name, 1, 1, N'/') collate SQL_Latin1_General_CP1_CS_AS)
- select @dash_parameter_name = lower(stuff(@parameter_name, 1, 1, N'-') collate SQL_Latin1_General_CP1_CS_AS)
-
- IF exists ( select * from msdb..MSagent_parameters
- where profile_id = @profile_id and
- (lower(parameter_name collate SQL_Latin1_General_CP1_CS_AS) = @slash_parameter_name collate SQL_Latin1_General_CP1_CS_AS or
- lower(parameter_name collate SQL_Latin1_General_CP1_CS_AS) = @dash_parameter_name collate SQL_Latin1_General_CP1_CS_AS))
- BEGIN
- update msdb..MSagent_parameters set value = @parameter_value where
- profile_id = @profile_id and
- (lower(parameter_name collate SQL_Latin1_General_CP1_CS_AS) = @slash_parameter_name collate SQL_Latin1_General_CP1_CS_AS or
- lower(parameter_name collate SQL_Latin1_General_CP1_CS_AS) = @dash_parameter_name collate SQL_Latin1_General_CP1_CS_AS)
-
- if @@error <> 0
- return(1)
- END
- GO
-
- raiserror('Creating procedure sp_change_agent_profile', 0,1)
- go
- -- Change one parameter of a profile from the MSagent_profiles table
- create procedure sp_change_agent_profile(
- @profile_id int,
- @property sysname,
- @value nvarchar(3000)
- )AS
-
- IF lower(@property collate SQL_Latin1_General_CP1_CS_AS) not in ('description')
- BEGIN
- RAISERROR(21183, 16, -1, @property)
- RETURN (1)
- END
-
- IF exists ( select * from msdb..MSagent_profiles where profile_id = @profile_id)
- BEGIN
- update msdb..MSagent_profiles set description = @value where profile_id = @profile_id
- if @@error <> 0
- return(1)
- END
- GO
-
-
- raiserror('Creating procedure sp_help_agent_parameter', 0,1)
- go
- -- View all the parameters of a profile from the MSagent_parameters table
- create procedure sp_help_agent_parameter(
- @profile_id int = -1
- )
- as
- set nocount on
-
- if @profile_id = -1
- begin
- select profile_id, parameter_name, value
- from msdb..MSagent_parameters
- order by profile_id, parameter_name
- end
- else
- begin
- select profile_id, parameter_name, value
- from msdb..MSagent_parameters
- where profile_id = @profile_id
- order by profile_id, parameter_name
- end
- GO
-
- raiserror('Creating procedure sp_MShelp_distdb', 0,1)
- go
-
- -- Called by the distribution agent to find the dist. db of a dist. publisher
- create procedure sp_MShelp_distdb (
- @publisher_name sysname
- )
- as
- if exists (select name from msdb..sysobjects where name = 'MSdistpublishers')
- begin
- select distribution_db from msdb..MSdistpublishers
- where UPPER(name) = UPPER(@publisher_name) collate database_default
- end
- else
- select NULL where 1=2 /* We still want an empty rowset for some agents */
- GO
-
- dump tran master with no_log
- GO
-
- raiserror('Creating procedure sp_MSupdate_replication_status', 0,1)
- go
- create procedure sp_MSupdate_replication_status
- @publisher sysname,
- @publisher_db sysname,
- @publication sysname,
- @publication_type int = 0, -- 0 Transactional/Snapshot 1 Merge
- @agent_type int,
- @agent_name nvarchar(100),
- @status int
- as
-
- declare @deleted int
- declare @refresh int
- declare @getstatus int
- declare @dummy int
- declare @is_merge_agent bit
-
- if @agent_type = 4 or @agent_type = 0x80000004
- set @is_merge_agent = 1
- else
- set @is_merge_agent = 0
-
- set @deleted = -1
- set @refresh = -2 -- Status used to only update the timestamp column
- set @getstatus = -3 -- Get status of agent for dummy distribution row
-
-
- -- if table dne, then we're just installing distribution so we don't need to update status
- if (select object_id('tempdb.dbo.MSreplication_agent_status')) is NULL
- return 0
-
- -- If there are not rows in the table, we know that it is not loaded or used
- -- No need to refresh (better performance)
- -- At least, there will on row if loaded (see sp_MSload_replication_status)
- if not exists (select * from tempdb.dbo.MSreplication_agent_status)
- return 0
-
- if @status = @getstatus
- begin
- select @status = isnull(status, 0) from tempdb.dbo.MSreplication_agent_status where
- UPPER(publisher) = UPPER(@publisher) and
- publisher_db = @publisher_db and
- publication = 'ALL' and
- agent_type = @agent_type
- end
-
- -- Update timestamp column via dummy update
- if @status = @refresh
- begin
- -- Dummy update to force timestamps to be updated.
- update tempdb.dbo.MSreplication_agent_status set status = status where
- UPPER(publisher) = UPPER(@publisher) and
- publisher_db = @publisher_db and
- publication like @publication -- Must use like as publication may be "%"
- return (0)
- end
-
- -- Remove row if @deleted
- if @status = @deleted
- begin
- if @@trancount > 0
- begin
- if exists (select * from tempdb.dbo.MSreplication_agent_status with (TABLOCKX) where 1 = 1)
- begin
- select @dummy = 1
- end
- end
-
- if @agent_name = '%' or @agent_name IS NULL
- delete from tempdb.dbo.MSreplication_agent_status with (TABLOCKX) where
- UPPER(publisher) = UPPER(@publisher) and
- publisher_db = @publisher_db and
- publication = @publication and
- agent_type = @agent_type
- else
- delete from tempdb.dbo.MSreplication_agent_status with (TABLOCKX) where
- UPPER(publisher) = UPPER(@publisher) and
- publisher_db = @publisher_db and
- publication = @publication and
- agent_type = @agent_type and
- agent_name = @agent_name
-
- -- Dummy update to force timestamps to be updated. This will signal a row has been
- -- removed.
- update tempdb.dbo.MSreplication_agent_status set status = status where
- UPPER(publisher) = UPPER(@publisher) and
- publisher_db = @publisher_db and
- publication = @publication
- return (0)
- end
-
- -- If misc. replication job then the status needs to be mapped.
- if @agent_type = 5
- begin
- set @status =
- case isnull(@status,5) -- mapped to never run
- when 0 then 5 -- Fail mapping
- when 1 then 2 -- Success mapping
- when 2 then 5 -- Retry mapping
- when 3 then 2 -- Shutdown mapping
- when 4 then 3 -- Inprogress mapping
- when 5 then 0 -- Unknown is mapped to never run
- end
- end
-
- if @is_merge_agent = 1
- begin
- update tempdb.dbo.MSreplication_agent_status set status = @status
- where agent_name = @agent_name and
- publication = @publication and
- UPPER(publisher) = UPPER(@publisher) and
- publisher_db = @publisher_db and
- agent_type = @agent_type
-
- if @@rowcount = 0
- insert into tempdb.dbo.MSreplication_agent_status
- (publisher, publisher_db, publication, publication_type, agent_type, status, agent_name) values
- (@publisher, @publisher_db, @publication, @publication_type, @agent_type, @status, @agent_name)
- end
- else
- begin
- if not exists (select * from tempdb.dbo.MSreplication_agent_status where
- UPPER(publisher) = UPPER(@publisher) and
- publisher_db = @publisher_db and
- publication = @publication and
- agent_type = @agent_type and
- agent_name = @agent_name)
-
- insert into tempdb.dbo.MSreplication_agent_status
- (publisher, publisher_db, publication, publication_type, agent_type, status, agent_name) values
- (@publisher, @publisher_db, @publication, @publication_type, @agent_type, @status, @agent_name)
-
- else
- update tempdb.dbo.MSreplication_agent_status set status = @status where
- UPPER(publisher) = UPPER(@publisher) and
- publisher_db = @publisher_db and
- (publication = @publication or @publication = 'ALL')and
- agent_type = @agent_type and
- agent_name = @agent_name
- end
-
- return (0)
- go
-
- raiserror('Creating procedure sp_MSenum_misc_agents', 0,1)
- go
- create procedure sp_MSenum_misc_agents
- as
- SET NOCOUNT ON
-
- declare @timestamp timestamp
-
- -- Not supported, but returned to be consistent with other sp_MSenum_replication_agent
- -- result set.
- set @timestamp = 0
-
- select j.name, 'agent_type' = c.name,
- 'status' = case isnull(jh.run_status, 5) -- mapped to never run
- when 0 then 5 -- Fail mapping
- when 1 then 2 -- Success mapping
- when 2 then 5 -- Retry mapping
- when 3 then 2 -- Shutdown mapping
- when 4 then 3 -- Inprogress mapping
- when 5 then 0 -- Unknown is mapped to never run
- end,
- jh.message, 'start_time' = convert(nvarchar(8), jh.run_date) + N' ' +
- stuff(stuff(right(convert(nvarchar(7), jh.run_time + 1000000), 6), 5, 0, N':'), 3, 0, N':') +
- + N'.000',
- jh.run_duration,
- 'job_id' = convert(binary(16), j.job_id), 'local_timestamp' = @timestamp from
- msdb..sysjobs j
- LEFT OUTER JOIN msdb..sysjobhistory jh ON
- j.job_id = jh.job_id and
- jh.instance_id = (select max(instance_id) from msdb..sysjobhistory jh2 where
- jh2.job_id = j.job_id)
- INNER JOIN msdb..syscategories c ON
- j.category_id = c.category_id
- where j.category_id in (11, 12,16,17,18)
-
- order by j.job_id asc
- go
-
- raiserror('Creating procedure sp_MSload_replication_status', 0,1)
- go
-
- create procedure sp_MSload_replication_status
- as
- set nocount on
-
- declare @db_name sysname
- declare @distbit int
- declare @retcode int
-
- select @distbit = 16
- select @retcode = 0
-
- -- Flush out all current rows
- delete tempdb.dbo.MSreplication_agent_status
-
- -- Load misc. replication jobs status and map SQL Agent status to replication status
- -- If users delete all misc repl jobs, the status table may not be updated
- -- see sp_MSupdate_replication_status
- insert into tempdb.dbo.MSreplication_agent_status
- select '', '', '', -1, 5,
- case isnull(jh.run_status,5) -- mapped to never run
- when 0 then 5 -- Fail mapping
- when 1 then 2 -- Success mapping
- when 2 then 5 -- Retry mapping
- when 3 then 2 -- Shutdown mapping
- when 4 then 3 -- Inprogress mapping
- when 5 then 0 -- Unknown is mapped to never run
- end,
- j.name, NULL from msdb..sysjobs j
- LEFT OUTER JOIN msdb..sysjobhistory jh ON
- j.job_id = jh.job_id and
- jh.instance_id = (select max(instance_id) from msdb..sysjobhistory jh2 where
- jh2.job_id = j.job_id)
- where j.category_id in (11,12,16,17,18)
- if @@error <> 0
- return 1
-
- declare hCdatabase CURSOR LOCAL FAST_FORWARD FOR
- select name from master.dbo.sysdatabases
- where
- category & @distbit <> 0 and
- has_dbaccess(name) = 1
- for read only
-
- open hCdatabase
- fetch next from hCdatabase into @db_name
- while (@@fetch_status <> -1)
- begin
-
- insert into tempdb.dbo.MSreplication_agent_status
- (publisher, publisher_db, publication, publication_type, agent_type, status, agent_name)
- exec (@db_name + '.dbo.sp_MSenum_replication_status')
-
- fetch next from hCdatabase into @db_name
- end
-
- DONE:
- close hCdatabase
- deallocate hCdatabase
-
-
- -- Add and initialize Perfmon SQL Replication Agents instances
- exec @retcode = dbo.sp_MSinit_replication_perfmon
- if @retcode <> 0 or @@error <> 0
- return 1
-
- GO
-
- raiserror('Creating procedure sp_MScreate_replication_status_table', 0,1)
- go
- create proc sp_MScreate_replication_status_table
- as
- declare @retcode int
-
- if (select object_id('tempdb.dbo.MSreplication_agent_status')) is NULL
- begin
- -- begin tran
- create table tempdb.dbo.MSreplication_agent_status (
- publisher sysname NOT NULL,
- publisher_db sysname NOT NULL,
- publication sysname NOT NULL,
- publication_type int NOT NULL, -- 0 transactional/snapshot 1 Merge
- agent_type int NOT NULL,
- status int NOT NULL,
- agent_name nvarchar(100) NOT NULL,
- timestamp NOT NULL
- )
- if @@error <> 0
- return 1
-
- create clustered index cMSreplication_agent_status ON tempdb.dbo.MSreplication_agent_status (agent_name)
- if @@error <> 0
- return 1
- create nonclustered index nc1MSreplication_agent_status ON
- tempdb.dbo.MSreplication_agent_status (publication, publisher_db, publisher)
- if @@error <> 0
- return 1
- create nonclustered index nc2MSreplication_agent_status ON
- tempdb.dbo.MSreplication_agent_status (agent_type)
- if @@error <> 0
- return 1
- create nonclustered index nc3MSreplication_agent_status ON
- tempdb.dbo.MSreplication_agent_status (timestamp)
- if @@error <> 0
- return 1
- end
- return 0 -- If here, all is well and we're done.
- go
-
- raiserror('Creating procedure sp_MShelp_replication_status', 0,1)
- go
-
- create procedure sp_MShelp_replication_status (
- @publisher sysname = '%',
- @publisher_db sysname = '%',
- @publication sysname = '%',
- @agent_type int = 0,
- @exclude_anonymous bit = 0
- )
- as
- begin
- --set transaction isolation level read uncommitted
-
- declare @retcode int
- ,@max_status int
- ,@max_timestamp timestamp
- ,@publication_type int
- ,@all_status int
- ,@all_timestamp timestamp
- ,@distdbname sysname
- ,@anonymous_mask int
- ,@anonymous_bit_when_hide int
- ,@anonymous_bit_when_show int
-
- select @anonymous_mask = 0x80000000
- if @exclude_anonymous = 0
- begin
- select @anonymous_bit_when_hide = 0x00000000
- ,@anonymous_bit_when_show = 0x80000000
- end
- else
- begin
- select @anonymous_bit_when_hide = 0x80000000
- ,@anonymous_bit_when_show = 0x00000000
- end
-
- -- If the local distributor is not installed, we return nothing rather than
- -- fail with table not exists error.
- if (select object_id('tempdb.dbo.MSreplication_agent_status')) is NULL
- return 0
-
- -- If the temporary status table is empty populate it.
- -- If populated, there should be at lease history cleanup task.
- if not exists (select * from tempdb.dbo.MSreplication_agent_status)
- begin
- exec @retcode = dbo.sp_MSload_replication_status
- if @@error <> 0
- return 1
- end
-
-
- -- @agent_type is only supported with all wildcards
- if @agent_type <> 0 and (@publisher <> '%' or @publisher_db <> '%' or @publication <> '%')
- return 1
-
- if @publisher = '%'
- begin
- -- @agent_type = 0 returns status of all agents including the misc. agents.
- -- @agent_type = -1 returns status of all agents except misc. agents.
- if @agent_type = 0 or @agent_type = -1
- begin
- select @max_status = max(status), @max_timestamp = max(timestamp)
- from tempdb.dbo.MSreplication_agent_status (NOLOCK)
- where ((@agent_type = -1 and agent_type <> 5) or
- @agent_type = 0) and
- -- Filter out anonymous if needed
- agent_type & @anonymous_bit_when_hide = 0
- end
- else
- begin
- select @max_status = max(status), @max_timestamp = max(timestamp)
- from tempdb.dbo.MSreplication_agent_status (NOLOCK)
- where
- -- Turn off the anonymous bit when showing
- agent_type & ~@anonymous_bit_when_show = @agent_type
- end
- end
- else if @publication = '%'
- begin
- select @max_status = max(status), @max_timestamp = max(timestamp)
- from tempdb.dbo.MSreplication_agent_status (NOLOCK)
- where UPPER(publisher) = UPPER(@publisher) and
- -- Filter out anonymous if needed
- agent_type & @anonymous_bit_when_hide = 0
- -- publisher_db = @publisher_db
-
- --
- -- Process the Queue reader entry separately and check if we need to pick them
- --
- select @distdbname = distribution_db
- from msdb.dbo.MSdistpublishers where name = @publisher collate database_default
-
- select @all_status = status, @all_timestamp = timestamp
- from tempdb.dbo.MSreplication_agent_status (NOLOCK)
- where agent_type = 9 and publisher = @@servername and publisher_db = @distdbname
-
- if @all_status > @max_status
- select @max_status = @all_status
-
- if @all_timestamp > @max_timestamp
- select @max_timestamp = @all_timestamp
- end
- else if @publication <> '%'
- begin
- select top 1 @max_status = status from tempdb.dbo.MSreplication_agent_status (NOLOCK) where
- UPPER(publisher) = UPPER(@publisher) and
- publisher_db = @publisher_db and
- publication = @publication and
- -- Filter out anonymous if needed
- agent_type & @anonymous_bit_when_hide = 0
- order by status desc
-
- -- Get publication type from the Snapshot agent of the Publication. This used to determine
- -- if the Logreader status should be included.
- select @publication_type = publication_type from tempdb.dbo.MSreplication_agent_status (NOLOCK) where
- UPPER(publisher) = UPPER(@publisher) and
- publisher_db = @publisher_db and
- publication = @publication and
- agent_type = 1 -- Snapshot agent
-
- select @max_timestamp = max(timestamp) from tempdb.dbo.MSreplication_agent_status (NOLOCK) where
- UPPER(publisher) = UPPER(@publisher) and
- publisher_db = @publisher_db and
- publication = @publication and
- -- Filter out anonymous if needed
- agent_type & @anonymous_bit_when_hide = 0
-
- -- If publication_type = 0 then transactional and must include the Logreader
- -- with publication = 'ALL'
- if @publication_type = 0
- begin
- select @all_status = status, @all_timestamp = timestamp
- from tempdb.dbo.MSreplication_agent_status (NOLOCK)
- where
- UPPER(publisher) = UPPER(@publisher) and
- publisher_db = @publisher_db and
- publication = 'ALL' and
- agent_type = 2 --Logreader
-
- if @all_status > @max_status
- select @max_status = @all_status
-
- if @all_timestamp > @max_timestamp
- select @max_timestamp = @all_timestamp
-
- --
- -- Process the Queue reader entry separately and check if we need to pick them
- --
- select @distdbname = distribution_db
- from msdb.dbo.MSdistpublishers where name = @publisher collate database_default
-
- declare @proc nvarchar(512)
- ,@allow_queued_tran bit
-
- SELECT @proc = quotename(@distdbname) + N'.dbo.sp_MSispublicationqueued'
- exec @retcode = @proc
- @publisher = @publisher
- ,@publisher_db = @publisher_db
- ,@publication = @publication
- ,@allow_queued_tran = @allow_queued_tran output
- if (@retcode != 0 and @@error != 0)
- return 1
-
- if (@allow_queued_tran = 1)
- begin
- select @all_status = status, @all_timestamp = timestamp
- from tempdb.dbo.MSreplication_agent_status (NOLOCK)
- where agent_type = 9 and publisher = @@servername and publisher_db = @distdbname
-
- if @all_status > @max_status
- select @max_status = @all_status
-
- if @all_timestamp > @max_timestamp
- select @max_timestamp = @all_timestamp
- end
- end
- end
-
- -- Return result set
- select 'status' = isnull(@max_status, 0), 'timestamp' = isnull (@max_timestamp, 0)
-
- --set transaction isolation level read committed
- return (0)
- end
- go
-
- raiserror('Creating procedure sp_MSenum_replication_agents', 0,1)
- go
- create procedure sp_MSenum_replication_agents
- @type int,
- @exclude_anonymous bit = 0,
- @check_user bit = 0
- as
- set nocount on
- --set transaction isolation level read uncommitted
-
- declare @snapshot int
- declare @logreader int
- declare @distribution int
- declare @sproc sysname
- declare @db_name sysname
- declare @table_name sysname
- declare @cmd nvarchar(255)
- declare @distbit int
- declare @merge int
- declare @misc int
- declare @qreader int
-
- select @distbit = 16
-
- select @snapshot = 1
- select @logreader = 2
- select @distribution = 3
- select @merge = 4
- select @misc = 5
- select @qreader = 9
-
- if @type = @misc
- begin
- exec dbo.sp_MSenum_misc_agents
- return 0
- end
-
- if @type = @snapshot
- begin
- select @sproc = 'sp_MSenum_snapshot'
- create table #snapshot (dbname sysname collate database_default not null, name nvarchar(100) collate database_default not null,
- status int NOT NULL,
- publisher sysname collate database_default not null, publisher_db sysname collate database_default not null,
- publication sysname collate database_default not null,
- start_time nvarchar(24) collate database_default null, time nvarchar(24) collate database_default null, duration int NULL,
- comments nvarchar(255) collate database_default null, delivered_transactions int NULL,
- delivered_commands int NULL, delivery_rate float NULL, error_id INT NULL,
- job_id binary(16) NULL, local_job bit NULL, profile_id int NOT NULL,
- agent_id int NOT NULL, local_timestamp binary(8) NOT NULL)
-
- create unique clustered index ucsnapshot ON #snapshot (job_id)
-
- select @table_name = '#snapshot'
- end
- else if @type = @logreader
- begin
- select @sproc = 'sp_MSenum_logreader'
- create table #logreader (dbname sysname collate database_default not null, name nvarchar(100) collate database_default not null,
- status int NOT NULL,
- publisher sysname collate database_default not null, publisher_db sysname collate database_default not null,
- start_time nvarchar(24) collate database_default null, time nvarchar(24) collate database_default null, duration int NULL,
- comments nvarchar(255) collate database_default null, delivery_time int NULL,
- delivered_transactions int NULL, delivered_commands int NULL,
- average_commands int NULL, delivery_rate int NULL, delivery_latency int NULL,
- error_id INT NULL, job_id binary(16) NULL, local_job bit NULL,
- profile_id int NOT NULL, agent_id int NOT NULL, local_timestamp binary(8) NOT NULL)
-
- create unique clustered index uclogreader ON #logreader (job_id)
-
- select @table_name = '#logreader'
- end
- else if @type = @distribution
- begin
- select @sproc = 'sp_MSenum_distribution'
- create table #distribution (dbname sysname collate database_default not null,
- name nvarchar(100) collate database_default not null,
- status int NOT NULL,
- publisher sysname collate database_default not null, publisher_db sysname collate database_default not null,
- publication sysname collate database_default null,
- subscriber sysname collate database_default null, subscriber_db sysname collate database_default null, subscription_type int NULL,
- start_time nvarchar(24) collate database_default null, time nvarchar(24) collate database_default null, duration int NULL,
- comments nvarchar(255) NULL, delivery_time int NULL,
- delivered_transactions int NULL, delivered_commands int NULL,
- average_commands int NULL, delivery_rate int NULL,
- delivery_latency int NULL, error_id INT NULL,
- job_id binary(16) NULL, local_job bit NULL, profile_id int NOT NULL,
- agent_id int NOT NULL, local_timestamp binary(8) NOT NULL,
- offload_enabled bit NOT NULL, offload_server sysname collate database_default null,
- subscriber_type tinyint NULL)
-
- create unique clustered index ucdistribution ON #distribution (job_id)
-
- select @table_name = '#distribution'
- end
- else if @type = @merge
- begin
- select @sproc = 'sp_MSenum_merge'
- create table #merge (dbname sysname collate database_default not null, name nvarchar(100) collate database_default not null,
- status int NOT NULL,
- publisher sysname collate database_default not null, publisher_db sysname collate database_default not null, publication sysname collate database_default null,
- subscriber sysname collate database_default null, subscriber_db sysname collate database_default null, subscription_type int NULL,
- start_time nvarchar(24) collate database_default null, time nvarchar(24) collate database_default null, duration int NULL,
- comments nvarchar(255) NULL, delivery_rate int NULL,
- publisher_insertcount int NULL, publisher_updatecount int NULL, publisher_deletecount int NULL,
- publisher_conficts int NULL,
- subscriber_insertcount int NULL, subscriber_updatecount int NULL, subscriber_deletecount int NULL,
- subscriber_conficts int NULL, error_id int NULL, job_id binary(16) NULL,
- local_job bit NULL, profile_id int NOT NULL, agent_id int NOT NULL,
- local_timestamp binary(8) NOT NULL, offload_enabled bit NOT NULL,
- offload_server sysname collate database_default null, subscriber_type tinyint NULL)
-
- create unique clustered index ucmerge ON #merge (job_id)
-
-
- select @table_name = '#merge'
- end
- else if @type = @qreader
- begin
- select @sproc = 'sp_MSenum_qreader'
- create table #qreader (dbname sysname collate database_default not null,
- name nvarchar(100) collate database_default not null, status int NOT NULL,
- start_time nvarchar(24) collate database_default null, time nvarchar(24) collate database_default null, duration int NULL,
- comments nvarchar(255) collate database_default null,
- transactions_processed int NULL, commands_processed int NULL,
- average_commands int NULL, delivery_rate int NULL, delivery_latency int NULL,
- error_id INT NULL, job_id binary(16) NULL,
- profile_id int NULL, agent_id int NOT NULL, local_timestamp binary(8) NOT NULL)
-
- create unique clustered index ucqreader ON #qreader (job_id)
-
- select @table_name = '#qreader'
- end
-
- declare hCdatabase CURSOR LOCAL FAST_FORWARD FOR
- select name from master.dbo.sysdatabases
- where
- category & @distbit <> 0 and
- has_dbaccess(name) = 1
- for read only
-
- open hCdatabase
- fetch next from hCdatabase into @db_name
- while (@@fetch_status <> -1)
- begin
-
- -- Check to see if the user has permision to monitor the distribution
- -- database.
- declare @has_pm bit
- select @cmd = quotename(@db_name) + '.dbo.sp_executesql'
- exec @cmd
- N'if is_member(N''db_owner'') = 1 or is_member(N''replmonitor'') = 1 set @has_pm = 1',
- N'@has_pm bit output',
- @has_pm output
- if @has_pm = 1
- begin
- if @check_user = 1
- begin
- select 'is_replmonitor' = 1
- return
- end
- else
- begin
- select @cmd = 'insert into ' + @table_name +
- ' exec ' + quotename(@db_name) + '.dbo.' + @sproc + ' @show_distdb = 1'
-
- if @type in (@distribution, @merge)
- select @cmd = @cmd +
- ', @exclude_anonymous = ' + cast(@exclude_anonymous as nvarchar(1))
-
- exec (@cmd)
- end
- end
- fetch next from hCdatabase into @db_name
- end
- close hCdatabase
- deallocate hCdatabase
-
- -- Don't return agents if in check user mode
- if @check_user = 1
- return
-
-
- select @cmd = 'select * from ' + @table_name + ' order by job_id asc'
- exec (@cmd)
-
- -- Drop the table
- select @cmd = 'drop table ' + @table_name
- exec (@cmd)
- --set transaction isolation level read committed
-
- GO
-
- raiserror('Creating procedure sp_replication_agent_checkup', 0,1)
- go
- create procedure sp_replication_agent_checkup
- @heartbeat_interval int = 10 -- minutes
- as
- declare @distribution_db sysname
- declare @retstatus int
- declare @proc nvarchar(255)
- declare @retcode int
-
- declare hCdistdbs CURSOR LOCAL FAST_FORWARD for
- select name from msdb..MSdistributiondbs where
- has_dbaccess(name) = 1
- for read only
- open hCdistdbs
- fetch hCdistdbs into @distribution_db
- while @@fetch_status <> -1
- begin
- select @proc = @distribution_db + '.dbo.sp_MSagent_stethoscope'
- execute @retcode = @proc @heartbeat_interval
- if @@error <> 0 or @retcode <> 0
- begin
- select @retstatus = 1
- goto UNDO
- end
- fetch hCdistdbs into @distribution_db
- end
-
- set @retstatus = 0
-
- UNDO:
- close hCdistdbs
- deallocate hCdistdbs
- return (@retstatus)
- go
-
- raiserror('Creating procedure sp_MScreate_replication_checkup_agent', 0,1)
- go
- create procedure sp_MScreate_replication_checkup_agent
- @heartbeat_interval int = 10 -- minutes
- as
- declare @command nvarchar(100)
- declare @retcode int
- declare @interval int
- declare @job_name nvarchar(100)
- declare @description nvarchar(100)
- declare @category_name sysname
-
- select @command = 'sp_replication_agent_checkup @heartbeat_interval = ' +
- convert(nvarchar(10), @heartbeat_interval)
-
- -- Create job if it already exists
- select @job_name = formatmessage(20533)
-
- IF EXISTS (SELECT * FROM msdb..sysjobs_view WHERE name = @job_name collate database_default and
- UPPER(originating_server) = UPPER(CONVERT(sysname, SERVERPROPERTY('ServerName'))))
- BEGIN
- EXEC @retcode = msdb.dbo.sp_delete_job @job_name = @job_name
- IF @@ERROR <> 0 or @retcode <> 0
- BEGIN
- return (1)
- END
- END
-
- -- Create new job
- set @interval = convert(int, @heartbeat_interval)
- set @description = formatmessage(20534)
-
- -- Get Checkup category name (assumes category_id = 16)
- select @category_name = name FROM msdb.dbo.syscategories where category_id = 16
- EXECUTE @retcode = dbo.sp_MSadd_repl_job
- @name = @job_name,
- @subsystem = 'TSQL',
- @enabled = 1,
- @command = @command,
- @description = @description,
- @freqtype = 4,
- @freqinterval = 1,
- @freqsubtype = 4,
- @freqsubinterval = @interval,
- @retryattempts = 0,
- @category_name = @category_name
- if @@ERROR <> 0 or @retcode <> 0
- return (1)
- go
-
- raiserror('Creating procedure sp_MSenum_replication_job', 0,1)
- go
- create procedure sp_MSenum_replication_job
- @job_id uniqueidentifier
- as
- SET NOCOUNT ON
- declare @message nvarchar(1024)
- declare @retcode int
- declare @runstatus int
- declare @date int
- declare @time int
-
- -- Get last message from SQL Agent History table
- create table #JobHistory (
- instance_id int NOT NULL,
- job_id uniqueidentifier NOT NULL,
- job_name nvarchar(100) collate database_default not null,
- step_id int NOT NULL,
- step_name nvarchar(100) collate database_default not null,
- sql_message_id int NOT NULL,
- sql_severity int NOT NULL,
- message nvarchar(1024) collate database_default null,
- run_status int NOT NULL,
- run_date int NOT NULL,
- run_time int NOT NULL,
- run_duration int NOT NULL,
- operator_emailed sysname collate database_default null,
- operator_netsent sysname collate database_default null,
- operator_paged sysname collate database_default null,
- retries_attempted int NOT NULL,
- server sysname collate database_default not null
- )
- if @@error <> 0
- return 1
-
- -- Insert last history for step_id 1 (Agent running)
- set rowcount 1
- insert into #JobHistory exec msdb.dbo.sp_help_jobhistory @job_id = @job_id, @step_id = 1,
- @mode = 'FULL'
-
- -- Get the last history
- select @message = message, @runstatus = run_status, @date = run_date, @time = run_time
- from #JobHistory
-
- -- Reset rowcount
- set rowcount 0
-
- -- Map SQL Agent runstatus to Replication runstatus
- set @runstatus =
- case @runstatus
- when 0 then 6 -- Fail mapping
- when 1 then 2 -- Success mapping
- when 2 then 5 -- Retry mapping
- when 3 then 2 -- Shutdown mapping
- when 4 then 3 -- Inprogress mapping
- when 5 then 0 -- Unknown is mapped to never run
- end
-
- declare @sztime nchar(6)
- select @sztime = convert(nchar(6), @time)
-
- -- If the time is like 53030 (5:30:30), make it 053030
- if len(@sztime) = 5
- select @sztime = N'0' + @sztime
-
- -- Return status and message
- select 'runstatus' = isnull(@runstatus, 0), 'message' = @message, 'date' = @date,
- 'time' = @time, 'datetime' =
- -- use this style 20000405 13:05:00.000, refer to sp_MSenumallsubscriptions
- convert(nchar(8), @date) + N' ' +
- substring(@sztime, 1, 2) + N':' +
- substring(@sztime, 3, 2) + N':' +
- -- miliseconds are not availible
- substring(@sztime, 5, 2) + N'.000'
-
- drop table #JobHistory
- go
-
- raiserror('Creating procedure sp_MSrepl_dbrole', 0,1)
- go
- CREATE PROCEDURE sp_MSrepl_dbrole
- @rolename sysname,
- @loginname sysname,
- @operation nvarchar(10),
- @is_member bit = 0 OUTPUT
- AS
- -- This is an internal stored procedure.
- -- If operation is 'add', it will add the login as a user to current database if necessary
- -- get the user name of the login and add it to the role
- -- If operation is 'drop', it will drop the user from the role.
- -- SETUP RUNTIME OPTIONS / DECLARE VARIABLES --
- declare @retcode int
- declare @username sysname
- declare @sid varbinary(85)
-
- select @sid = suser_sid(@loginname)
-
- if @operation = 'is_member'
- begin
- if exists (select * from sysusers r, sysusers u, sysmembers m where
- u.sid = @sid and
- r.name = @rolename and
- m.groupuid = r.uid and
- m.memberuid = u.uid)
- select @is_member = 1
- else
- select @is_member = 0
- return(0)
- end
-
- -- Add the login to db role.
- if is_srvrolemember('sysadmin', @loginname) <> 1
- begin
- select @username = name from sysusers where sid = @sid
- if @operation = 'add'
- begin
- if @username is null
- begin
- -- Add the server login to be a user with same name in the database
- exec @retcode = dbo.sp_adduser @loginname
- if @retcode<>0 or @@error <> 0
- return 1
- select @username = @loginname
- end
-
- exec @retcode = dbo.sp_addrolemember @rolename, @username
- if @@error <> 0 OR @retcode <> 0
- return 1
- end
- else if @operation = 'drop'
- begin
- if @username is not null
- begin
- exec @retcode = dbo.sp_droprolemember @rolename, @username
- if @@error <> 0 OR @retcode <> 0
- return 1
- end
- end
- end
- go
-
- raiserror('Creating procedure sp_changedistributor_password', 0,1)
- go
- CREATE PROCEDURE sp_changedistributor_password (
- @password sysname
- ) AS
-
- declare @distributor sysname
- declare @distnetname sysname
- declare @retcode int
- declare @login sysname
-
- select @login = 'distributor_admin'
- SELECT @distributor = NULL
- SELECT @distributor = srvname, @distnetname = datasource
- FROM master..sysservers
- WHERE srvstatus & 8 <> 0
-
- exec @retcode = dbo.sp_addlinkedsrvlogin
- @rmtsrvname= @distributor,
- @useself = 'false',
- @locallogin = NULL,
- @rmtuser = @login,
- @rmtpassword = @password
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RETURN (1)
- END
-
- if UPPER(@distnetname) = UPPER(@@servername)
- begin
- -- Change the password if the distributor is local
- EXEC @retcode = dbo.sp_password NULL, @password, 'distributor_admin'
- if @@error <> 0 or @retcode <> 0
- return(1)
- end
-
- return (0)
- GO
-
- raiserror('Creating procedure sp_oledbinfo', 0,1)
- go
- CREATE PROCEDURE sp_oledbinfo
- @server nvarchar(128),
- @infotype nvarchar(128) = NULL,
- @login nvarchar(128) = NULL,
- @password nvarchar(128) = NULL
- AS
-
- SET NOCOUNT ON
-
- DECLARE @distributor sysname
- DECLARE @distproc nvarchar (255)
- DECLARE @retcode int
-
- /*
- ** Get distribution server information for remote RPC
- ** subscription calls.
- */
-
- EXEC @retcode = dbo.sp_helpdistributor @rpcsrvname = @distributor OUTPUT
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
-
- select @distproc = rtrim(@distributor) + '.master.dbo.sp_MSget_oledbinfo'
- exec @retcode = @distproc @server, @infotype, @login, @password
- IF @@error <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
-
- go
-
- raiserror('Creating procedure sp_MSget_oledbinfo', 0,1)
- go
- CREATE PROCEDURE sp_MSget_oledbinfo
- @server nvarchar(128), -- the name by which the oledb datasource is referred to.
- @infotype nvarchar(128) = NULL,
- @login nvarchar(128) = NULL,
- @password nvarchar(128) = NULL
- AS
-
- SET NOCOUNT ON
-
- DECLARE @distproc nvarchar (255)
- DECLARE @providername nvarchar(256)
- DECLARE @datasource nvarchar(4000)
- DECLARE @location nvarchar(4000)
- DECLARE @providerstring nvarchar(4000)
- DECLARE @catalog nvarchar(256)
- DECLARE @retcode int
-
- select @providername = providername, @datasource = datasource, @location = location, @providerstring = providerstring, @catalog = catalog
- from master..sysservers where UPPER(srvname) = UPPER(@server) collate database_default
-
- if (@@rowcount = 0)
- begin
- raiserror(15015, 16, -1, @server)
- return (1)
- end
-
- exec @retcode = master..xp_oledbinfo @providername, @datasource, @location, @providerstring, @catalog, @login, @password, @infotype
- IF @@error <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
-
- go
-
- raiserror('Creating procedure sp_grant_publication_access', 0,1)
- go
- CREATE PROCEDURE sp_grant_publication_access (
- @publication sysname,
- @login sysname,
- @reserved nvarchar(10) = NULL
- ) AS
-
- -- This stored procedure can be called repeatedly.
- DECLARE @distribdb sysname
- DECLARE @distproc nvarchar (300)
- DECLARE @retcode int
- DECLARE @dist_rpcname sysname
- DECLARE @database sysname
-
- -- Security Check
- exec @retcode = dbo.sp_MSreplcheck_publish
- if @@ERROR <> 0 or @retcode <> 0
- return(1)
-
- select @database = db_name()
-
- -- Existance check of the publication will be done in sp_MSpublication_access
- -- Note, even if the login exists, it may or may not has access
- -- to the server (granted or denied).
- if @reserved is null
- begin
- if not exists (select * from master..syslogins where
- sid = suser_sid(@login) and
- hasaccess = 1)
- begin
- raiserror(15007, 16, -1, @login)
- return (1)
- end
-
- -- Don't do the user check if sysadmin since sysadmin can enter
- -- the database as dbo.
- if is_srvrolemember('sysadmin',@login) = 0 and
- not exists (select * from sysusers where
- (sid = suser_sid(@login) or name = N'guest') and
- hasdbaccess = 1)
- begin
- raiserror(20619, 16, -1, @login, @database)
- return (1)
- end
- end
-
- select @database = db_name()
-
- EXEC @retcode = dbo.sp_helpdistributor @rpcsrvname = @dist_rpcname OUTPUT,
- @distribdb = @distribdb OUTPUT
- IF @@error <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- return (1)
- END
-
- IF @retcode <> 0 OR @distribdb IS NULL OR @dist_rpcname IS NULL
- BEGIN
- RAISERROR (14071, 16, -1)
- return(1)
- END
-
- SELECT @distproc = RTRIM(@dist_rpcname) + '.' + RTRIM(@distribdb) + '.dbo.sp_MSpublication_access'
-
- declare @skip bit
-
- declare @login2 sysname
-
- if @reserved = 'init'
- begin
- -- Skip logins that are not at the distributor without
- -- raiseing error.
- set @skip = 1
- declare hC CURSOR LOCAL FAST_FORWARD for
- select loginname from master..syslogins where
- (is_srvrolemember('sysadmin', loginname) = 1 or
- sid = suser_sid())
- for read only
- end
- else
- begin
- set @skip = 0
- declare hC CURSOR LOCAL FAST_FORWARD for
- select @login
- for read only
- end
-
- open hC
- fetch hC into @login2
-
- while (@@fetch_status <> -1)
- begin
- EXEC @retcode = @distproc
- @publisher = @@SERVERNAME,
- @publisher_db = @database,
- @publication = @publication,
- @login= @login2,
- @operation = 'add',
- @skip = @skip
- IF @@error <> 0 OR @retcode <> 0
- return (1)
-
- fetch hC into @login2
- end
-
- close hC
- deallocate hC
- GO
-
- raiserror('Creating procedure sp_revoke_publication_access', 0,1)
- go
- CREATE PROCEDURE sp_revoke_publication_access (
- @publication sysname,
- @login sysname
- ) AS
-
- -- This stored procedure can be called repeatedly.
- DECLARE @distribdb sysname
- DECLARE @distproc nvarchar (300)
- DECLARE @retcode int
- DECLARE @dist_rpcname sysname
- DECLARE @database sysname
-
- -- Security Check
- exec @retcode = dbo.sp_MSreplcheck_publish
- if @@ERROR <> 0 or @retcode <> 0
- return(1)
-
- -- Do check existense when dropping since the login might be dropped
- -- outside replication already.
-
- select @database = db_name()
-
- EXEC @retcode = dbo.sp_helpdistributor @rpcsrvname = @dist_rpcname OUTPUT,
- @distribdb = @distribdb OUTPUT
- IF @@error <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- return (1)
- END
-
- IF @retcode <> 0 OR @distribdb IS NULL OR @dist_rpcname IS NULL
- BEGIN
- RAISERROR (14071, 16, -1)
- return(1)
- END
-
- SELECT @distproc = RTRIM(@dist_rpcname) + '.' + RTRIM(@distribdb) + '.dbo.sp_MSpublication_access'
- EXEC @retcode = @distproc
- @publisher = @@SERVERNAME,
- @publisher_db = @database,
- @publication = @publication,
- @login= @login,
- @operation = 'drop'
-
- IF @@error <> 0 OR @retcode <> 0
- return (1)
- GO
-
- raiserror('Creating procedure sp_help_publication_access', 0,1)
- go
- CREATE PROCEDURE sp_help_publication_access (
- @publication sysname,
- @return_granted bit = 1,
- @login sysname = '%',
- @initial_list bit = 0
- ) AS
-
- set nocount on
- -- This stored procedure can be called repeatedly.
- DECLARE @distribdb sysname
- DECLARE @distproc nvarchar (300)
- DECLARE @retcode int
- DECLARE @dist_rpcname sysname
- DECLARE @database sysname
-
- exec @retcode = dbo.sp_MSreplcheck_publish
- if @@ERROR <> 0 or @retcode <> 0
- return(1)
-
- -- Do check existense when dropping since the login might be dropped
- -- outside replication already.
-
- select @database = db_name()
-
- EXEC @retcode = dbo.sp_helpdistributor @rpcsrvname = @dist_rpcname OUTPUT,
- @distribdb = @distribdb OUTPUT
- IF @@error <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- return (1)
- END
-
- IF @retcode <> 0 OR @distribdb IS NULL OR @dist_rpcname IS NULL
- BEGIN
- RAISERROR (14071, 16, -1)
- return(1)
- END
-
- SELECT @distproc = RTRIM(@dist_rpcname) + '.' + RTRIM(@distribdb) + '.dbo.sp_MSpublication_access'
-
- -- Get logins in the PAL if needed
- if @initial_list = 0
- begin
- create table #granted (login sysname collate database_default null)
- insert into #granted EXEC @retcode = @distproc
- @publisher = @@SERVERNAME,
- @publisher_db = @database,
- @publication = @publication,
- @operation = 'help',
- @login = @login
-
- IF @@error <> 0 OR @retcode <> 0
- return (1)
- end
-
- -- Get distributor valid logins if needed
- if @return_granted = 0 or @initial_list = 1
- begin
- create table #dist_logins(login sysname collate database_default null)
- insert into #dist_logins EXEC @retcode = @distproc
- @publisher = @@SERVERNAME,
- @operation = 'get_logins'
- end
-
- if @initial_list = 1
- begin
- -- Get the initial list for the publication to be created
- -- by the current user
- -- It contains all the logins sysadmin group and the current user
- -- that have valid login at the distributor.
- select l.loginname, l.isntname, l.isntgroup
- from master..syslogins l, #dist_logins d where
- l.sid = suser_sid(d.login) and
- l.hasaccess = 1 and
- (is_srvrolemember('sysadmin',d.login) = 1 or (l.sid = suser_sid()))
- end
- else if @return_granted = 0
- begin
- select l.loginname, l.isntname, l.isntgroup
- from master..syslogins l, #dist_logins d where
- l.sid = suser_sid(d.login) and
- l.hasaccess = 1 and
- not exists (select * from #granted g where
- suser_sid(g.login) = l.sid) and
- exists (select * from sysusers u where
- (u.sid = l.sid or u.name = 'guest') and
- u.hasdbaccess = 1)
- end
- else if @return_granted = 1
- begin
- select l.loginname, l.isntname, l.isntgroup from master..syslogins l,
- #granted g where
- l.sid = suser_sid(g.login)
- end
- GO
-
- raiserror('Creating procedure sp_check_publication_access', 0,1)
- go
- CREATE PROCEDURE sp_check_publication_access
- @publication sysname,
- @given_login sysname = NULL
- AS
- set nocount on
- declare @retcode int
- exec @retcode = dbo.sp_MSreplcheck_pull
- @publication = @publication,
- @given_login = @given_login
- if @retcode <> 0 or @@error <> 0
- return (1)
- return 0
- GO
-
- exec dbo.sp_MS_marksystemobject sp_check_publication_access
- go
-
- raiserror('Creating procedure sp_MSget_agent_names', 0,1)
- go
- CREATE PROCEDURE sp_MSget_agent_names
- @publication sysname,
- @subscriber sysname = NULL,
- @subscriber_db sysname = NULL,
- @publisher sysname = NULL,
- @publisher_db sysname = NULL
- as
- set nocount on
-
- declare @retcode int
-
- if @publisher is null
- -- We are at the publisher side, call into the distributor
- begin
- /*
- ** Get distribution server information for remote RPC
- ** agent verification.
- */
- declare @distributor sysname
- declare @distribdb sysname
- declare @distproc nvarchar(1000), @pubdb sysname
-
- select @pubdb = db_name()
-
- EXEC @retcode = dbo.sp_helpdistributor @rpcsrvname = @distributor OUTPUT,
- @distribdb = @distribdb OUTPUT
-
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
-
- /*
- ** Call proc to change the distributor
- */
- SELECT @distproc = RTRIM(@distributor) + '.' + @distribdb +
- '.dbo.sp_MSget_agent_names'
- exec @retcode = @distproc
- @publisher = @@SERVERNAME,
- @publisher_db = @pubdb,
- @publication = @publication,
- @subscriber = @subscriber,
- @subscriber_db = @subscriber_db
- end
- else
- -- We are at the distribution db
- begin
- declare @publisher_id smallint
- select @publisher_id = srvid from master..sysservers where UPPER(srvname) = UPPER(@publisher) collate database_default
-
- if @subscriber is null
- -- Returning publication agents if @subscriber is null
- begin
- declare @snapshot_agent sysname, @logreader_agent sysname, @qreader_agent sysname
-
- -- Have to use name in sysjobs table because users may rename
- -- the SQLServerAgent jobs. If users deleted the jobs, DMO scripting will
- -- create new jobs.
-
- select
- 'snapshot_agent' = (select j.name from MSsnapshot_agents a, msdb..sysjobs j where
- publisher_id = @publisher_id and
- publisher_db = @publisher_db collate database_default and
- publication = @publication collate database_default and
- a.job_id = j.job_id),
- 'logreader_agent' = (select j.name from MSlogreader_agents a, msdb..sysjobs j where
- publisher_id = @publisher_id and
- publisher_db = @publisher_db collate database_default and
- a.job_id = j.job_id),
- 'qreader_agent' = (select j.name from MSqreader_agents a, msdb..sysjobs j where
- a.job_id = j.job_id)
- end
- else
- begin
- declare @subscriber_id smallint
- select @subscriber_id = srvid from master..sysservers where UPPER(srvname) = UPPER(@subscriber) collate database_default
- declare @publication_type int, @independent_agent bit
-
- select @publication_type = publication_type, @independent_agent = independent_agent
- from MSpublications where
- publisher_id = @publisher_id and
- publisher_db = @publisher_db and
- publication = @publication
-
- if @publication_type = 2
- -- Merge publication, get merge agent name
- begin
- select 'merge_agent' = j.name from MSmerge_agents a, msdb..sysjobs j where
- publisher_id = @publisher_id and
- publisher_db = @publisher_db collate database_default and
- publication = @publication collate database_default and
- subscriber_id = @subscriber_id and
- subscriber_db = @subscriber_db collate database_default and
- a.job_id = j.job_id
- end
- else
- begin
- select 'distribution_agent' = j.name from MSdistribution_agents a, msdb..sysjobs j where
- publisher_id = @publisher_id and
- publisher_db = @publisher_db collate database_default and
- (publication = @publication collate database_default or
- publication = N'ALL' and @independent_agent = 0) and
- subscriber_id = @subscriber_id and
- subscriber_db = @subscriber_db collate database_default and
- a.job_id = j.job_id
- end
- end
- end -- If @publisher is null
-
- go
-
- exec dbo.sp_MS_marksystemobject sp_MSget_agent_names
- go
-
- raiserror('Creating procedure sp_MSinit_replication_perfmon', 0,1)
- go
-
- create proc sp_MSinit_replication_perfmon
- as
- declare @agent_type int
- declare @agent_name nvarchar(100)
- declare @status int
-
- -- Remove all existing instances
- dbcc deleteinstance ("SQL Replication Agents", "%")
- dbcc deleteinstance ("SQL Replication Snapshot", "%")
- dbcc deleteinstance ("SQL Replication Logreader", "%")
- dbcc deleteinstance ("SQL Replication Distribution", "%")
- dbcc deleteinstance ("SQL Replication Merge", "%")
- dbcc deleteinstance ("SQL Replication Queuereader", "%")
-
- -- Add and initialize Perfmon SQL Replication Agents instances
- dbcc addinstance ("SQL Replication Agents", "Snapshot")
- dbcc addinstance ("SQL Replication Agents", "Logreader")
- dbcc addinstance ("SQL Replication Agents", "Distribution")
- dbcc addinstance ("SQL Replication Agents", "Merge")
- dbcc addinstance ("SQL Replication Agents", "Queuereader")
- dbcc setinstance ("SQL Replication Agents", "Running", "Snapshot", 0)
- dbcc setinstance ("SQL Replication Agents", "Running", "Logreader", 0)
- dbcc setinstance ("SQL Replication Agents", "Running", "Distribution", 0)
- dbcc setinstance ("SQL Replication Agents", "Running", "Merge", 0)
- dbcc setinstance ("SQL Replication Agents", "Running", "Queuereader", 0)
-
- -- Add instances for each agent currently in the status table
- declare hC CURSOR LOCAL FAST_FORWARD for select agent_type, agent_name, status from tempdb.dbo.MSreplication_agent_status for read only
- open hC
- fetch hC into @agent_type, @agent_name, @status
- while (@@fetch_status <> -1)
- begin
-
- if @agent_type = 1
- begin
- dbcc addinstance ("SQL Replication Snapshot", @agent_name)
- if @status = 1 or @status = 3 or @status = 4
- dbcc incrementinstance ("SQL Replication Agents", "Running", "Snapshot", 1)
- end
- else if @agent_type = 2
- begin
- dbcc addinstance ("SQL Replication Logreader", @agent_name)
- if @status = 1 or @status = 3 or @status = 4
- dbcc incrementinstance ("SQL Replication Agents", "Running", "Logreader", 1)
- end
- else if @agent_type = 3
- begin
- dbcc addinstance ("SQL Replication Distribution", @agent_name)
- if @status = 1 or @status = 3 or @status = 4
- dbcc incrementinstance ("SQL Replication Agents", "Running", "Distribution", 1)
- end
- else if @agent_type = 4
- begin
- dbcc addinstance ("SQL Replication Merge", @agent_name)
- if @status = 1 or @status = 3 or @status = 4
- dbcc incrementinstance ("SQL Replication Agents", "Running", "Merge", 1)
- end
- else if @agent_type = 9
- begin
- dbcc addinstance ("SQL Replication Queuereader", @agent_name)
- if @status = 1 or @status = 3 or @status = 4
- dbcc incrementinstance ("SQL Replication Agents", "Running", "Queuereader", 1)
- end
-
- fetch hC into @agent_type, @agent_name, @status
- end
- close hC
- deallocate hC
- GO
-
- raiserror('Creating procedure sp_MSrepl_startup', 0,1)
- go
- create procedure sp_MSrepl_startup
- as
-
- -- Drop and create publisher side cache table
- if exists (select * from tempdb..sysobjects where name = 'MSpublisher_access' and
- type = 'U')
- drop table tempdb.dbo.MSpublisher_access
-
- create table tempdb.dbo.MSpublisher_access
- (
- spid int NOT NULL,
- db_id int not null,
- publication sysname not null,
- login_time datetime not null,
- pubid uniqueidentifier null -- Used for merge only.
- )
-
- CREATE CLUSTERED INDEX ucMSpublisher_access ON tempdb.dbo.MSpublisher_access
- (spid, publication, db_id)
-
- -- Drop and create distributor side cache table
- -- We need to avoid publisher and distributor using the same table to prevent
- -- contention in local distributor case.
- if exists (select * from master..sysservers
- WHERE srvstatus & 8 <> 0 and UPPER(datasource) = UPPER(@@servername) collate database_default)
- begin
- if exists (select * from tempdb..sysobjects where name = 'MSdistributor_access' and
- type = 'U')
- drop table tempdb.dbo.MSdistributor_access
-
- create table tempdb.dbo.MSdistributor_access
- (
- spid int NOT NULL,
- db_id int not null,
- agent_id int not null,
- agent_type int not null,
- publication_id int not null,
- login_time datetime not null
- )
-
- CREATE CLUSTERED INDEX ucMSdistributor_access ON tempdb.dbo.MSdistributor_access
- (spid, agent_id, db_id)
-
- -- Create repl monitor table
- exec sp_MScreate_replication_status_table
- end
- go
-
- -- If a distributor is installed, mark the sp as a startup sp.
- if exists (select * FROM master..sysservers WHERE srvstatus & 8 <> 0)
- exec dbo.sp_procoption 'sp_MSrepl_startup', 'startup', 'true'
- go
-
- raiserror('Creating procedure sp_MSflush_access_cache', 0,1)
- go
- CREATE PROCEDURE sp_MSflush_access_cache
- AS
- -- Delete all the 'dead' connections in MSpublisher_access.
- delete tempdb.dbo.MSpublisher_access
- from tempdb.dbo.MSpublisher_access a
- where not exists (select * from master..sysprocesses p where
- a.spid = p.spid and
- p.login_time = a.login_time)
- if @@error <> 0
- return 1
- else
- return 0
-
- if exists (select * from tempdb..sysobjects where name = 'MSdistributor_access' and
- type = 'U')
- begin
- -- Delete all the 'dead' connections in MSdistributor_access.
- delete tempdb.dbo.MSdistributor_access
- from tempdb.dbo.MSdistributor_access a
- where not exists (select * from master..sysprocesses p where
- a.spid = p.spid and
- p.login_time = a.login_time)
- if @@error <> 0
- return 1
- else
- return 0
- end
- return (0)
- GO
-
- raiserror('Creating procedure sp_MSreinit_failed_subscriptions', 0,1)
- go
- -- This stored procedure is used as a response to the Replication Validation Failure Alert.
- -- It will reinit the failed subscription. If the publisher is remote, it must be configured as a remote server
- -- for this procedure to work.
- create proc sp_MSreinit_failed_subscriptions
- @failure_level int = 0 -- 0 All failure 1 Validation failures
- as
-
- declare @publisher sysname
- declare @publisher_db sysname
- declare @publication sysname
- declare @article sysname
- declare @publication_type int
- declare @subscriber sysname
- declare @subscriber_db sysname
- declare @agent_type int
- declare @alert_id int
- declare @proc nvarchar(100)
- declare @message nvarchar(4000)
- declare @retcode int
- declare @found bit
- declare @return_value int
-
- set nocount on
-
- set @found = 0 -- set if cursor returns a row
- set @return_value = 0 -- set to success
-
- -- For each publication validation failure, resync the subscription
- declare hc CURSOR LOCAL FAST_FORWARD for select publisher, publisher_db, publication, publication_type, article, subscriber,
- subscriber_db, alert_id from
- msdb..sysreplicationalerts where
- (@failure_level = 0 or (@failure_level = 1 and alert_error_code = 20574)) and -- 20574 = validation failure
- status = 0
- for read only
-
- open hc
- fetch hc into @publisher, @publisher_db, @publication, @publication_type, @article, @subscriber, @subscriber_db, @alert_id
- while (@@fetch_status <> -1)
- begin
-
- set @found = 1
-
- -- Reinit snapshot or transactional subscription (article level)
- if @publication_type = 0 or @publication_type = 1
- begin
- set @proc = @publisher + '.' + @publisher_db + '.dbo.sp_reinitsubscription'
- exec @retcode = @proc
- @publication = @publication,
- @article = @article,
- @subscriber = @subscriber,
- @destination_db = @subscriber_db
- -- Ignore failures, update status bit if successful
- if @retcode = 0
- begin
- -- Change status to 1 which means the alerts has been serviced
- update msdb..sysreplicationalerts set status = 1 where alert_id = @alert_id
-
- -- Raiserror that subscription was reinitialized
- if @failure_level = 0
- -- 'Subscriber ''%s'' subscription to article ''%s'' in publication ''%s'' has been reinitialized after a synchronization failure.'
- raiserror(20576, 10,-1, @subscriber, @article, @publication)
- else if @failure_level = 1
- -- 'Subscriber ''%s'' subscription to article ''%s'' in publication ''%s'' has been reinitialized after a validation failure.'
- raiserror(20572, 10,-1, @subscriber, @article, @publication)
- end
- else -- failure
- set @return_value = 1
- end
- -- Reinit merge subscription (full publication)
- else if @publication_type = 2
- begin
- set @proc = @publisher + '.' + @publisher_db + '.dbo.sp_reinitmergesubscription'
- exec @retcode = @proc
- @publication = @publication,
- @subscriber = @subscriber,
- @subscriber_db = @subscriber_db
- -- Ignore failures, update status bit if successful
- if @retcode = 0
- begin
- -- Change status to 1 which means the alerts has been serviced
- update msdb..sysreplicationalerts set status = 1 where alert_id = @alert_id
-
- -- Raiserror that subscription was reinitialized
- if @failure_level = 0
- -- 'Subscriber ''%s'' subscription to to article ''%s'' in publication ''%s'' has been reinitialized after a synchronization failure.'
- raiserror(20576, 10,-1, @subscriber, @article, @publication)
- else if @failure_level = 1
- -- 'Subscriber ''%s'' subscription to to article ''%s'' in publication ''%s'' has been reinitialized after a validation failure.'
- raiserror(20572, 10,-1, @subscriber, @article, @publication)
- end
- else -- failure
- set @return_value = 1
- end
-
- fetch hc into @publisher, @publisher_db, @publication, @publication_type, @article, @subscriber, @subscriber_db, @alert_id
- end
-
- close hc
- deallocate hc
-
- -- Return a message stating no entries where found
- if @found = 0
- begin
- -- 'No entries were found in msdb..sysreplicationalerts.'
- raiserror(20577, 10,-1)
-
- -- There is most likely a problem, set failure return value
- set @return_value = 1
- end
-
- return @return_value
- go
- dump tran master with no_log
- GO
-
- raiserror('Creating procedure sp_add_datatype_mapping', 0,1)
- go
-
- -- Add a row into the "MSdatatype_mappings" table
- create procedure sp_add_datatype_mapping (
- @dbms_name sysname,
- @sql_type sysname,
- @dest_type sysname,
- @dest_prec int,
- @dest_create_params int,
- @dest_nullable bit
- )
- as
- set nocount on
-
- if @dbms_name is null
- BEGIN
- RAISERROR (14043, 16, -1, '@dbms_name')
- RETURN (1)
- END
-
- if @sql_type is null
- BEGIN
- RAISERROR (14043, 16, -1, '@sql_type')
- RETURN (1)
- END
-
- if @dest_type is null
- BEGIN
- RAISERROR (14043, 16, -1, '@dest_type')
- RETURN (1)
- END
-
- if @dest_prec is null
- BEGIN
- RAISERROR (14043, 16, -1, '@dest_prec')
- RETURN (1)
- END
-
- if @dest_create_params is null
- BEGIN
- RAISERROR (14043, 16, -1, '@dest_create_params')
- RETURN (1)
- END
-
- if @dest_nullable is null
- BEGIN
- RAISERROR (14043, 16, -1, '@dest_nullable')
- RETURN (1)
- END
-
-
- insert into msdb..MSdatatype_mappings
- values (@dbms_name, @sql_type, @dest_type, @dest_prec, @dest_create_params, @dest_nullable)
-
- if @@error <> 0
- return(1)
- GO
-
- raiserror('Creating procedure sp_MSrepl_gettype_mappings', 0,1)
- go
- create procedure sp_MSrepl_gettype_mappings(
- @dbms_name sysname,
- @sql_type sysname = '%',
- @source_prec int = NULL
- )
- as
- set nocount on
- declare @retcode int
- declare @distributor sysname
- declare @distribdb sysname
- declare @distproc nvarchar (255)
-
- EXECUTE @retcode = dbo.sp_helpdistributor @rpcsrvname = @distributor OUTPUT,
- @distribdb = @distribdb OUTPUT
- IF @@ERROR <> 0 or @retcode <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
-
- SELECT @distproc = RTRIM(@distributor) + '.master' +
- '.dbo.sp_help_datatype_mapping'
-
- EXECUTE @retcode = @distproc
- @dbms_name = @dbms_name,
- @sql_type = @sql_type,
- @source_prec = @source_prec
-
- IF @@ERROR <> 0 OR @retcode <> 0
- return 1
- ELSE
- return 0
- go
-
- raiserror('Creating procedure sp_help_datatype_mapping', 0,1)
- go
- create procedure sp_help_datatype_mapping(
- @dbms_name sysname,
- @sql_type sysname = '%',
- @source_prec int = NULL
- )
- as
- set nocount on
-
- if @source_prec is NULL
- begin
- select sql_type, dest_type, dest_prec, dest_create_params, dest_nullable
- from msdb..MSdatatype_mappings
- where dbms_name = @dbms_name collate database_default
- and sql_type like @sql_type collate database_default
- end
- else
- begin
- select sql_type, dest_type, dest_prec, dest_create_params, dest_nullable
- from msdb..MSdatatype_mappings
- where dbms_name = @dbms_name collate database_default
- and sql_type like @sql_type collate database_default
- and dest_prec = (select min(dest_prec)
- from msdb..MSdatatype_mappings
- where dbms_name = @dbms_name collate database_default
- and sql_type like @sql_type collate database_default
- and dest_prec >= @source_prec
- )
- end
- GO
-
- raiserror('Creating procedure sp_MSfix_6x_tasks', 0,1)
- go
- CREATE PROCEDURE sp_MSfix_6x_tasks (
- @publisher sysname = NULL
- ) AS
-
- SET NOCOUNT ON
-
- DECLARE @distributor sysname
- DECLARE @distproc nvarchar (255)
- declare @retcode int
-
- -- If @publisher is null redirect the call to distributor
- if @publisher is null
- begin
- /*
- ** Get distribution server information for remote RPC
- ** agent verification.
- */
- EXEC @retcode = dbo.sp_helpdistributor @rpcsrvname = @distributor OUTPUT
-
- IF @@error <> 0 OR @retcode <> 0
- BEGIN
- RAISERROR (14071, 16, -1)
- RETURN (1)
- END
-
- /*
- ** RPC distributor
- */
- SELECT @distproc = RTRIM(@distributor) + '.master.dbo.sp_MSfix_6x_tasks'
-
- EXECUTE @retcode = @distproc
- @publisher = @@SERVERNAME
- IF @@ERROR <> 0 or @retcode <> 0
- return (1)
- end
- else
- begin
-
- declare @category_id int
- declare @category_name sysname
- declare @server sysname
- declare @databasename sysname
- declare @name sysname
- declare @distdb sysname
- declare @job_id uniqueidentifier
- declare @sSubsystem sysname
-
- -- Drop entry in systasks first.
- DECLARE hCtasks CURSOR LOCAL FAST_FORWARD FOR
- SELECT name FROM msdb.dbo.systasks_view st WHERE
-
- -- drop distribution agents.
- (st.name LIKE @publisher + '_' + '%' + '_' + '%' AND
- LOWER(subsystem collate SQL_Latin1_General_CP1_CS_AS) = 'distribution' AND
- server = @@SERVERNAME) OR
-
- (LOWER(subsystem collate SQL_Latin1_General_CP1_CS_AS) = 'logreader' AND
- server = @publisher) OR
-
- (LOWER(subsystem collate SQL_Latin1_General_CP1_CS_AS) = 'snapshot' AND
- server = @publisher) OR
-
- (st.name LIKE '%' + '_' + '%' + '_Cleanup' AND
- st.command LIKE '%' + 'sp_replcleanup' + '%' AND
- LOWER(subsystem collate SQL_Latin1_General_CP1_CS_AS) = 'tsql')
- FOR READ ONLY
-
- OPEN hCtasks
- FETCH hCtasks INTO @name
-
- WHILE (@@fetch_status <> -1)
- BEGIN
-
- EXEC @retcode = msdb.dbo.sp_droptask @name = @name
- if @retcode <> 0 or @@error <> 0
- return(1)
- FETCH hCtasks INTO @name
- END
-
- -- Now spin through each old replication job and fixup categories names
- declare hcJobsToFix CURSOR LOCAL FAST_FORWARD for
- select distinct j.job_id, j.name, s.subsystem,
- s.server, s.database_name
- from msdb.dbo.sysjobs j left join msdb.dbo.sysjobsteps s
- on j.job_id = s.job_id
- where j.category_id = 0 and s.step_id = 1 and lower(s.subsystem collate SQL_Latin1_General_CP1_CS_AS) in ( 'snapshot', 'logreader', 'distribution' )
- for read only
-
- open hcJobsToFix
- fetch hcJobsToFix into @job_id, @name, @sSubsystem,
- @server,@databasename
-
- while (@@fetch_status <> -1 )
- begin
- -- Note, have to make it a transaction, once the category_id is changed,
- -- the task will never be picked up again.
- begin tran
-
- -- Get Distribution category name (assumes category_id = 10)
- select @category_id =
- case lower(@sSubsystem collate SQL_Latin1_General_CP1_CS_AS)
- when 'snapshot' then 15
- when 'distribution' then 10
- when 'logreader' then 13
- else 0
- end
-
- select @category_name = name FROM msdb.dbo.syscategories where category_id = @category_id
-
- -- raiserror( 'Would update %s to category %d based on subsystem value %s', -1, 10, @nJobName, @iCategory, @sSubsystem )
- exec @retcode = msdb.dbo.sp_update_job @job_id = @job_id,
- @category_name = @category_name
- if @retcode <> 0 or @@error <> 0
- goto UNDO
-
-
- -- Add the replication agent for monitoring
- SELECT @distdb = distribution_db from msdb..MSdistpublishers where UPPER(name) = UPPER(@server) collate database_default
- IF (@category_id = 13) -- Logreader
- BEGIN
- SELECT @distproc = @distdb + '.dbo.sp_MSadd_logreader_agent'
- EXECUTE @retcode = @distproc
- @name = @name,
- @publisher = @server,
- @publisher_db = @databasename,
- @publication = '',
- @local_job = 1,
- @job_existing = 1,
- @job_id = @job_id
-
- IF (@retcode <> 0 or @@error<>0)
- goto UNDO
- END
- ELSE
- IF (@category_id = 15) -- Snapshot
- BEGIN
- DECLARE @publication sysname
-
- SELECT @publication = NULL
- EXECUTE master.dbo.sp_MSget_publication_from_taskname
- @taskname = @name,
- @publisher = @server,
- @publisherdb = @databasename,
- @publication = @publication OUTPUT
-
- IF (@publication IS NOT NULL )
- BEGIN
- SELECT @distproc = @distdb + '.dbo.sp_MSadd_publication'
- EXECUTE @retcode = @distproc
- @publisher = @server,
- @publisher_db = @databasename,
- @publication = @publication,
- @publication_type = 0 -- Transactional
- IF (@retcode <> 0 or @@error<>0)
- goto UNDO
-
- SELECT @distproc = @distdb + '.dbo.sp_MSadd_snapshot_agent'
- EXECUTE @retcode = @distproc
- @name = @name,
- @publisher = @server,
- @publisher_db = @databasename,
- @publication = @publication,
- @local_job = 1,
- @job_existing = 1,
- @snapshot_jobid = @job_id
- IF (@retcode <> 0 or @@error<>0)
- goto UNDO
- END
- END
- commit tran
- fetch hcJobsToFix into @job_id, @name, @sSubsystem,
- @server,@databasename
- end
- close hcJobsToFix
- deallocate hcJobsToFix
- end
- return (0)
- UNDO:
- if @@trancount <> 0
- rollback tran
- return (1)
- GO
-
- /*
- * Name : sp_MShelpconflictpublications
- * Description: This sp returns a list of publications or subscriptions in the current
- * database that may have conflicts. Results are ordered by publication
- * name.
- * Parameters: 1. publication_type( sysname; '%'==ALL (default) | 'merge' | 'queued' )
- * Output Result Set has the following structure:
- * ----------------------------------------------------------------------------------
- * Name Datatype Description
- * ----------------------------------------------------------------------------------
- * a. name (sysname) Publication name
- * b. publication_type (varchar(9)) 'merge' | 'queued' | 'immediate' (reserved)
- * c. merge_pub_id (uniqueidentifier) Merge publication identifier
- * d. queued_pub_id (integer) Queued publication identifier (I would prefer to name this as tran_pub_id)
- * e. sub_agent_id (integer) Unique publication identifier on a tran subscriber
- * NOTE: In case of queued tran publications, either d or e will have a value at any time
- * and this will also indicate, if we are processing a subscriber of a publication (d
- * will be NULL and e will have a value) or if we are processing the publisher side (d
- * will have a value and e will be NULL)
- */
- raiserror('Creating procedure sp_MShelpconflictpublications', 0,1)
- GO
-
- CREATE PROCEDURE sp_MShelpconflictpublications ( @publication_type varchar(9) ='%' )
- AS
- BEGIN
-
- SET nocount ON
-
- -- validate publication type
- IF NOT( lower(@publication_type collate SQL_Latin1_General_CP1_CS_AS) IN ('%', 'merge', 'queued') )
- BEGIN
- raiserror( 'invalid publication type', 16, -1 )
- RETURN (1)
- END
-
- -- temp table to store combined result set
- CREATE TABLE #result_list ( publication sysname collate database_default, publication_type VARCHAR(9) DEFAULT 'merge',
- merge_pub_id UNIQUEIDENTIFIER NULL,
- queued_pub_id INTEGER NULL, sub_agent_id INTEGER NULL, publisher sysname collate database_default NULL, publisher_db sysname collate database_default NULL)
-
- -- fetch merge results into temp table; need not affect any rows
- IF ( lower(@publication_type collate SQL_Latin1_General_CP1_CS_AS) IN ('%', 'merge') )
- BEGIN
- IF EXISTS( SELECT * FROM sysobjects WHERE name = 'sysmergepublications' )
- INSERT #result_list ( publication, merge_pub_id, publisher, publisher_db)
- EXEC sp_MShelpmergeconflictpublications
-
- -- may return 18757 (not merge published) and that is ok if @publication_type = ALL
- IF ( @@ERROR <> 0) AND ( @@ERROR = 18757 AND @publication_type = '%' )
- GOTO FAILURE
-
- END
-
- -- fetch tran results into temp table
- IF ( lower(@publication_type collate SQL_Latin1_General_CP1_CS_AS) IN ('%', 'queued') )
- BEGIN
- INSERT #result_list ( publication, publication_type, merge_pub_id , queued_pub_id, sub_agent_id )
- EXEC sp_MShelptranconflictpublications
- IF ( @@ERROR <> 0)
- GOTO FAILURE
-
- END
-
- -- return combined result list
- SELECT * FROM #result_list
-
- IF EXISTS( SELECT * FROM sysobjects WHERE type = 'U' AND name = '#result_list' )
- DROP TABLE #result_list
-
- RETURN (0)
-
- FAILURE:
-
- IF EXISTS( SELECT * FROM sysobjects WHERE type = 'U' AND name = '#result_list' )
- DROP TABLE #result_list
-
- RETURN (1)
-
- END
- GO
-
- raiserror('Creating function system_function_schema.fn_replgetagentcommandlinefromjobid',0,1)
- go
- --
- -- Name: fn_replgetagentcommandlinefromjobid
- --
- -- Description: This function retrieves the command line
- -- of the replication agent with the
- -- specified job_id.
- --
- -- Parameters: @agenttype nvarchar(16)
- -- @job_id uniqueidentifier
- --
- -- Returns: nvarchar(3200)
- --
- -- Notes: This function can return null if the
- -- the given job_id doesn't belong to a
- -- replication agent of the specified type.
- --
- -- Security: Admin access only
- --
- create function system_function_schema.fn_replgetagentcommandlinefromjobid (
- @agenttype nvarchar(16),
- @job_id uniqueidentifier
- ) returns nvarchar(3200)
- as
- begin
- declare @commandline nvarchar(3200)
- select @commandline = null
- select @agenttype = upper(@agenttype collate SQL_Latin1_General_CP1_CS_AS)
- select @commandline = command
- from msdb.dbo.sysjobsteps
- where job_id = @job_id
- and upper(subsystem collate SQL_Latin1_General_CP1_CS_AS) = @agenttype collate SQL_Latin1_General_CP1_CS_AS
-
- return @commandline
- end
- go
-
- raiserror('Creating procedure sp_replproberemoteserver', 0,1)
- go
- --
- -- Name: sp_replproberemoteserver
- --
- -- Description: This is a lightweight wrapper for calling xp_replproberremsrv
- -- with the added nicety of looking up the agent command line
- -- using the given jobid. This procedure supports two different
- -- modes of operation based on the @no_rpc parameter. If the
- -- @no_rpc parameter is 1, this procedure will not attempt to make
- -- rpc call to the Distributor. The local mode is mainly useful
- -- for verifying remote pull subscription agent.
- --
- -- Parameters: @remoteservername sysname (mandatory)
- -- @agent_type nvarchar(16) (optional, default = null)
- -- @agent_jobid uniqueidentifier (optional default = null)
- -- @no_rpc bit (optional default = 0)
- --
- -- Notes: If @job_id is null, only activation verification will be carried
- -- out.
- --
- -- Security: Execute permission of this procedure is granted to public
- --
- -- Result: 'probe_succeeded' 0 or 1
- --
- -- Returns: 0 - succeeded
- -- <> 0 - failed
- --
- create procedure dbo.sp_replproberemoteserver (
- @remoteservername sysname,
- @agent_type nvarchar(16) = null,
- @agent_jobid uniqueidentifier = null,
- @no_rpc bit = 0
- )
- as
- begin
- set nocount on
- declare @retcode int
- declare @commandline nvarchar(3200)
- declare @distributor sysname
- declare @distributiondb sysname
- declare @distproc nvarchar(255)
- declare @succeeded nvarchar(10)
-
- select @retcode = 0
- select @commandline = null
- select @succeeded = null
-
- if @agent_type is null
- begin
- select @agent_type = 'distribution'
- end
-
- -- @remoteservername cannot be null or empty
- select @remoteservername = rtrim(ltrim(@remoteservername))
- if @remoteservername is null or
- @remoteservername = N''
- begin
- raiserror(21263,16,-1,'@remoteservername')
- return 1
- end
-
- -- @agent_type must be 'distribution' or 'merge'
- if @agent_type not in (N'distribution', N'merge')
- begin
- raiserror(21182,16,-1)
- return 1
- end
-
- -- Get Distributor information
- if @no_rpc = 0
- begin
- exec @retcode = dbo.sp_helpdistributor @rpcsrvname = @distributor output,
- @distribdb = @distributiondb output
- if @@error <> 0 or @retcode <> 0
- return 1
- end
- else
- begin
- select @distributor = @@servername
- end
-
- if upper(@@servername) <> upper(@distributor)
- begin
- select @distproc = ltrim(rtrim(@distributor)) + '.' +
- 'master.dbo.sp_replproberemoteserver'
- exec @retcode = @distproc @remoteservername,
- @agent_type,
- @agent_jobid,
- 1
- return @retcode
- end
- else
- begin
- -- If the given @job_id is not null, try to get
- -- the agent command line
- if @agent_jobid is not null
- begin
- select @commandline = fn_replgetagentcommandlinefromjobid(
- @agent_type,
- @agent_jobid) collate database_default
-
- if @commandline is null
- begin
- raiserror(21361,6,-1, @agent_type)
- select 'probe_succeeded' = 0
- return 1
- end
-
- end
-
- exec @retcode = master.dbo.xp_replproberemsrv
- @remoteservername,
- @agent_type,
- @succeeded output,
- @commandline
-
- if lower(@succeeded collate SQL_Latin1_General_CP1_CS_AS) = N'true'
- select 'probe_succeeded' = 1
- else
- select 'probe_succeeded' = 0
-
- return @retcode
- end
-
- select 'probe_succeeded' = 0
-
- return 1
- end
- go
- exec sp_MS_marksystemobject sp_replproberemoteserver
- go
- grant execute on dbo.sp_replproberemoteserver to public
- go
-
- raiserror('Creating procedure sp_MScleanupmergepublisher', 0,1)
- go
- --
- -- Name: sp_MScleanupmergepublisher
- --
- -- Description: This procedure currently performs the following function(s):
- -- 1) Cleans up all the stale dynamic snapshot views
- -- in all databases enabled for merge replication. This
- -- procedure should normally be called at merge publisher startup.
- --
- -- Notes: 1)This procedure is enabled as a startup procedure when a database is
- -- enabled as a first merge publisher database on the server and it
- -- will be unmarked as a startup procedure when the last merge publisher
- -- database is disabled.
- -- 2)Errors within the SP are mostly ignored.
- -- 3)This procedure can also be used by admins/securityadmins to perform
- -- manual cleanup of all dynamic snapshot views. Note that cleaning up the
- -- dynamic snapshot views can disrupt dynamic snapshots that are being generated.
- --
- -- Returns: (undefined)
- --
- -- Security: Only members of the sysadmin fixed server role can execute this
- -- procedure successfully. So for this procedure to function proprely
- -- as a startup procedure, the MSSQLServer service account must be a
- -- member of the sysadmin role.
- --
- create procedure sp_MScleanupmergepublisher
- as
- begin
- set nocount on
- declare @status_mask int
- declare @published_mask int
- declare @published_database_name sysname
- declare @command nvarchar(4000)
-
- -- Masks off the databases with status that we don't want to deal with
- select @status_mask = 32 | -- loading
- 64 | -- pre recovery
- 128 | -- recovering
- 256 | -- not recovered
- 512 | -- offline
- 1024 -- read only
-
- select @published_mask = 4 -- Merge published
-
- declare hPublishedDatabase cursor local fast_forward for
- select name from sysdatabases
- where (status & @status_mask) = 0
- and (category & @published_mask) <> 0
-
- open hPublishedDatabase
-
- fetch hPublishedDatabase into @published_database_name
- while (@@fetch_status <> -1)
- begin
-
- select @command = 'use ' + QUOTENAME(@published_database_name) + '
- ' + 'exec sp_MScleanupmergepublisherdb'
-
-
- exec (@command)
- -- Ignore errors
- fetch hPublishedDatabase into @published_database_name
- end
-
- close hPublishedDatabase
- deallocate hPublishedDatabase
-
- end
- go
- exec sp_MS_marksystemobject sp_MScleanupmergepublisher
- go
-
- --
- -- Name: sp_MScleanupdynsnapshotvws
- --
- -- Description: This procedure is used to drop all the views listed in the
- -- MSdynamicsnapshotviews table of the publisher database. It is
- -- typically called by the merge cleanup procedure
- -- (sp_MScleanupmergepublisherdb) during server startup although
- -- the database administrator can choose to proactively call this
- -- procedure manually to clean up any temporary dynamic snapshot
- -- views left over from an abnormally terminated dynamic snapshot
- -- generation session.
- --
- -- Parameter: (none)
- --
- -- Notes: Calling this procedure while a dynamic snapshot is being generated
- -- will probably disrupt the said dynamic snapshot generation session.
- --
- -- Returns: 0 - succeeded
- -- 1 - failed
- --
- -- Result: none
- --
- -- Security: Execute permission of this procedure is granted to public.
- -- Internally, this procedure will call sp_MSreplcheck_publish
- -- to make sure that the caller is either server sysadmin or dbo
- -- of the publishing database
- --
- raiserror('Creating procedure sp_MScleanupdynsnapshotvws', 0,1)
- go
- create procedure sp_MScleanupdynsnapshotvws
- as
- begin
- set nocount on
- declare @retcode int
- select @retcode = 0
-
- -- Security check
- exec @retcode = sp_MSreplcheck_publish
- if @@error<>0 or @retcode<>0
- begin
- return 1
- end
-
- -- Do nothing if the MSdynamicsnapshotviews table does not exist
- if exists (select * from sysobjects where name = N'MSdynamicsnapshotviews')
- begin
- declare @dynamic_snapshot_view_name sysname
- declare @drop_view_command nvarchar(4000)
-
- declare hViews cursor local fast_forward for
- select dynamic_snapshot_view_name
- from MSdynamicsnapshotviews
- if @@error<>0
- begin
- goto Failure
- end
-
- open hViews
- if @@error<>0
- begin
- goto Failure
- end
-
- fetch hViews into @dynamic_snapshot_view_name
- while (@@fetch_status<>-1)
- begin
- select @drop_view_command = 'drop view ' +
- quotename(@dynamic_snapshot_view_name)
- exec(@drop_view_command)
- if @@error<>0
- begin
- select @retcode = 1 -- Just to indicate that a failure occurred
- end
- delete from MSdynamicsnapshotviews
- where dynamic_snapshot_view_name = @dynamic_snapshot_view_name
- if @@error<>0
- begin
- select @retcode = 1 -- Just to indicate that a failure occurred
- end
- fetch hViews into @dynamic_snapshot_view_name
- end
- end
- return @retcode
- Failure:
- return 1
- end
- go
- exec sp_MS_marksystemobject 'sp_MScleanupdynsnapshotvws'
- go
- raiserror('Creating procedure sp_MScleanupmergepublisherdb',0,1)
- go
- --
- -- Name: sp_MScleanupmergepublisherdb
- --
- -- Description: This procedure is the per-database analogue of
- -- sp_MScleanupmergepublisher and it currently performs the
- -- following function(s):
- -- 1) Cleans up all the stale dynamic snapshot views
- -- in the current database.
- --
- -- Returns: (undefined)
- --
- -- Security: Only members of the sysadmin fixed server role can execute this
- -- procedure.
- --
- create procedure sp_MScleanupmergepublisherdb
- as
- begin
- set nocount on
- declare @temp_login sysname
-
- if exists (select * from sysobjects
- where name = 'MSdynamicsnapshotviews')
- begin
- -- Ignore errors
- exec sp_MScleanupdynsnapshotvws
- end
-
- end
- go
- exec sp_MS_marksystemobject sp_MScleanupmergepublisherdb
- go
-
- raiserror('Creating procedure sp_MShelp_replication_table',0,1)
- go
- --
- -- Name: sp_MShelp_replication_table
- --
- -- Description: This procedure is used by DMO to get tables can be published and
- -- their properties
- --
- -- Returns: error code
- --
- -- Security: public
- --
- CREATE PROCEDURE sp_MShelp_replication_table (
- @table_name sysname = NULL,
- @table_owner sysname = NULL
- )
- AS
-
- SET NOCOUNT ON
-
- declare @objid int
-
- if @table_name is not null
- begin
- if @table_owner is NULL
- select @table_owner = user_name()
- declare @qualified_table_name nvarchar(260)
- select @qualified_table_name = QUOTENAME(@table_owner) + '.' + QUOTENAME(@table_name)
- select @objid = object_id(@qualified_table_name)
- if @objid is null
- begin
- RAISERROR (14027, 11, -1, @qualified_table_name)
- return(1)
- end
- end
-
- create table #merge_objects (objid int primary key)
-
- create table #queued_tran_objects (objid int primary key)
-
- if object_id('sysmergearticles') is not null
- insert into #merge_objects select distinct objid from sysmergearticles where
- objid = @objid or @objid is null
-
- if object_id('sysarticles') is not null
- insert into #queued_tran_objects select distinct objid from sysarticles a,
- syspublications p where
- (objid = @objid or @objid is null) and
- a.pubid = p.pubid and
- p.allow_queued_tran = 1
-
- select 'table name' = o.name,
- 'table owner' = user_name(o.uid),
- 'ID' = o.id,
- 'Category' = o.category,
- 'HasGuidColumn' = case when
- exists (select * from syscolumns c where c.id = o.id and
- xtype = (select xtype from systypes where name = 'uniqueidentifier'))
- then cast(1 as bit)
- else cast(0 as bit)
- end,
- 'HasTimeStampColumn' = ObjectProperty(o.id, 'TableHasTimestamp'),
- 'HasRowVersionColumn' = case when
- exists (select * from syscolumns c where c.id = o.id and
- name = N'msrepl_tran_version')
- then cast(1 as bit)
- else cast(0 as bit)
- end,
- 'HasIdentityColumn' = ObjectProperty(o.id, 'TableHasIdentity'),
- 'HasSQLVariantColumn' = case when
- exists (select * from syscolumns c where c.id = o.id and
- xtype = (select xtype from systypes where name = 'sql_variant'))
- then cast(1 as bit)
- else cast(0 as bit)
- end,
- 'HasBigIntColumn' = case when
- exists (select * from syscolumns c where c.id = o.id and
- xtype = (select xtype from systypes where name = 'bigint'))
- then cast(1 as bit)
- else cast(0 as bit)
- end,
- 'HasBigIntIdentityColumn' = case when
- exists (select * from syscolumns c where c.id = o.id and
- ColumnProperty(o.id, c.name, 'IsIdentity') = 1 and
- xtype = (select xtype from systypes where name = 'bigint'))
- then cast(1 as bit)
- else cast(0 as bit)
- end,
- 'MergePublished' = case when exists (select * from #merge_objects m where
- m.objid = o.id)
- then cast(1 as bit)
- else cast(0 as bit)
- end,
- 'QueuedTranPublished' = case when exists (select * from #queued_tran_objects m where
- m.objid = o.id)
- then cast(1 as bit)
- else cast(0 as bit)
- end,
- 'HasIdentityNotForReplColumn' = case when
- exists (select * from syscolumns c where c.id = o.id and
- ColumnProperty(o.id, c.name, 'IsIdNotForRepl') = 1)
- then cast(1 as bit)
- else cast(0 as bit)
- end
-
- from sysobjects o where o.xtype = 'U' and
- ObjectProperty(o.id, 'IsMSShipped') = 0 and
- (o.id = @objid or @objid is null)
- order by 1, 2
-
- drop table #merge_objects
- drop table #queued_tran_objects
- go
- exec sp_MS_marksystemobject sp_MShelp_replication_table
- grant execute on dbo.sp_MShelp_replication_table to public
- go
- create proc sp_MScopyscriptfile (
- @scriptfile nvarchar(4000),
- @cmd nvarchar(4000) OUTPUT
- )
- as
- declare @directory nvarchar(4000)
- declare @filename nvarchar(1024)
- declare @subdirectory nvarchar(1024)
- declare @retcode int
-
- IF @scriptfile IS NULL
- BEGIN
- RAISERROR (14043, 16, -1, '@scriptfile')
- RETURN (1)
- END
- -- Create the directory on distributor to store script.
- exec sp_helpdistributor @directory=@directory OUTPUT
- select @subdirectory = convert(nvarchar(64), GetDate(), 121)
- select @subdirectory = replace(@subdirectory, N'-', N'')
- select @subdirectory = replace(@subdirectory, N' ', N'')
- select @subdirectory = replace(@subdirectory, N':', N'')
- select @subdirectory = replace(@subdirectory, N'.', N'')
- if(right(@directory, 1) = N'\')
- select @directory = @directory + @subdirectory
- else
- select @directory = @directory + N'\' + @subdirectory
- select @cmd = N'md "' + @directory + '"'
- exec @retcode = master..xp_cmdshell @cmd, NO_OUTPUT
- if(@retcode <> 0)
- begin
- raiserror(21330, 16, -1, @cmd)
- return (1)
- end
-
- -- Copy script to distributor
- select @cmd = N'copy "' + @scriptfile + N'" "' + @directory + N'"'
- exec @retcode = master..xp_cmdshell @cmd, NO_OUTPUT
- if(@retcode <> 0)
- begin
- raiserror(21331, 16, -1, @cmd)
- return (1)
- end
-
- -- Prepare command, to be posted to log
- select @filename = right(@scriptfile, charindex(N'\', reverse(@scriptfile)))
- if(left(@filename, 1) = N'\')
- select @cmd = @directory + @filename
- else
- select @cmd = @directory + N'\' + @filename
- go
- exec sp_MS_marksystemobject sp_MScopyscriptfile
- go
- grant execute on dbo.sp_MScopyscriptfile to public
- go
- /*
- ** Add extended stored procedures for replication support.
- */
- sp_addextendedproc 'sp_repldone', 'repldone extended procedure'
- go
-
- sp_addextendedproc 'sp_repltrans', 'repltrans extended procedure'
- go
-
- sp_addextendedproc 'sp_replcounters', 'replcounters extended procedure'
- go
-
- sp_addextendedproc 'sp_replcmds', 'replcmds extended procedure'
- go
-
- sp_addextendedproc 'sp_replflush', 'replflush extended procedure'
- go
-
- dump tran master with no_log
- go
-
- sp_addextendedproc 'sp_replpostcmd', 'replpostcmd extended procedure'
- go
- sp_addextendedproc 'sp_replpostschema', 'replpostschema extended procedure'
- go
-
- sp_addextendedproc 'sp_replincrementlsn', 'replincrementlsn extended procedure'
- go
-
- sp_addextendedproc 'sp_replupdateschema', 'replupdateschema extended procedure'
- go
-
- sp_addextendedproc 'sp_replsetoriginator', 'replsetoriginator extended procedure'
- go
-
- sp_addextendedproc 'sp_replsetsyncstatus', 'replsetsyncstatus extended procedure'
- go
-
- sp_addextendedproc 'sp_replpostsyncstatus', 'replpostsyncstatus extended procedure'
- go
-
- /*
- ** Add xp_enum_dsn extended procedure
- */
- sp_addextendedproc 'xp_dsninfo','xpstar.dll'
- go
- exec dbo.sp_MS_marksystemobject xp_dsninfo
- go
-
- /*
- ** Add xp_enum_dsn extended procedure
- */
- sp_addextendedproc 'xp_enumdsn','xpstar.dll'
- go
- exec dbo.sp_MS_marksystemobject xp_enumdsn
- go
-
- /*
- ** Add xp_oledbinfo extended procedure
- */
- sp_addextendedproc 'xp_oledbinfo','xprepl.dll'
- go
- exec dbo.sp_MS_marksystemobject xp_oledbinfo
- go
-
- /*
- ** Add xp_repl_encrypt extended procedure
- */
- sp_addextendedproc 'xp_repl_encrypt','xprepl.dll'
- go
- exec dbo.sp_MS_marksystemobject xp_repl_encrypt
- go
-
-
- /*
- ** Add xp_repl_convert_encrypt extended procedure
- */
- sp_addextendedproc 'xp_repl_convert_encrypt','xprepl.dll'
- go
- exec dbo.sp_MS_marksystemobject xp_repl_convert_encrypt
- go
-
-
-
- /*
- ** Add xp_repl_convert_encrypt extended procedure
- */
- sp_addextendedproc 'xp_repl_help_connect','xprepl.dll'
- go
- exec dbo.sp_MS_marksystemobject xp_repl_help_connect
- go
-
-
-
- /*
- ** Add xp_replproberemsrv extended procedure
- */
- sp_addextendedproc 'xp_replproberemsrv','xprepl.dll'
- go
- exec dbo.sp_MS_marksystemobject xp_replproberemsrv
- go
-
- dump tran master with no_log
- go
-
- grant execute on dbo.sp_addpublication_snapshot to public
- go
- grant execute on dbo.sp_MShelpobjectpublications to public
- go
- grant execute on dbo.sp_helpreplicationdb to public
- go
- grant execute on dbo.sp_enumdsn to public
- go
- grant execute on dbo.sp_helpsubscriberinfo to public
- go
- grant execute on dbo.sp_replica to public
- go
- grant execute on dbo.sp_distcounters to public
- go
- grant execute on dbo.sp_helpdistributor to public
- go
- grant execute on dbo.sp_helpdistributiondb to public
- go
- grant execute on dbo.sp_helpdistpublisher to public
- go
- grant execute on dbo.sp_replcounters to public
- go
- grant execute on dbo.sp_MShelp_distdb to public
- go
- grant execute on dbo.sp_grant_publication_access to public
- go
- grant execute on dbo.sp_revoke_publication_access to public
- go
- grant execute on dbo.sp_help_publication_access to public
- go
- grant execute on dbo.sp_check_publication_access to public
- go
- grant execute on dbo.sp_replsetoriginator to public
- go
-
-
- GRANT EXECUTE ON dbo.sp_MShelpconflictpublications TO PUBLIC
- GO
-
- grant execute on dbo.sp_repldone to public
- go
- grant execute on dbo.sp_repltrans to public
- go
- grant execute on dbo.sp_replcounters to public
- go
- grant execute on dbo.sp_replcmds to public
- go
- grant execute on dbo.sp_replpostschema to public
- go
- grant execute on dbo.sp_replincrementlsn to public
- go
- grant execute on dbo.sp_replsetsyncstatus to public
- go
- grant execute on dbo.sp_replpostsyncstatus to public
- go
- grant execute on sp_MSenum_replication_job to public
- go
- grant execute on sp_MSrepl_gettype_mappings to public
- go
- grant execute on dbo.xp_replproberemsrv to public
- grant execute on sp_MShelp_replication_status to public
- grant execute on sp_MSenum_replication_agents to public
- -- proc need to be granted to public for replmonitor role
- grant execute on sp_help_agent_default to public
- grant execute on sp_help_agent_profile to public
- grant execute on sp_help_agent_parameter to public
- grant execute on sp_helpdistributor_properties to public
- grant execute on sp_MScleanupdynsnapshotvws to public
- grant execute on sp_MSget_agent_names to public
- go
-
-
- dump tran master with no_log
- go
-
-
-
- dump tran master with no_log
- go
- sp_configure 'allow updates',0
- go
- reconfigure with override
- go
-
- print ''
- print 'Checking objects created by replcom.sql.'
- go
- --obsolete exec dbo.sp_check_objects 'repl'
- exec dbo.sp_MS_upd_sysobj_category 2 --set sysobjects.category | 2 based on crdate.
- go
-
- print ''
- print 'replcom.sql completed successfully.'
- go
-
- dump tran master with no_log
- go
- checkpoint
- go
- -- - -----
-